上世纪六七十年代, 红岸基地一直在向茫茫外太空发送讯号, 当叶文洁通过太阳作为广播, 将地球的讯号向外发送时, 宇宙的各个先进文明都接收到了讯号, 其中就包括了离我们最近的三体星.
本篇用 node.js 的 http 模块模拟这一事件.
- let http = require('http')
- // 创建一个 web 服务器
- let server = http.createServer()
- server.on('request', function () {
- console.log('我们接收到了一个用原始膜发送讯号的文明, 这个文明竟然完全不知道宇宙的黑暗森林法则, 我们暂不清理她, 观察下这个文明的状态')
- })
- let port = 8000
- server.listen(port, function () {
- console.log('在浏览器访问: http://127.0.0.1:' + port + ', 你将把你的请求发送到宇宙中...')
- })
开启服务:
01 [master] node 08.js
在浏览器访问: http://127.0.0.1:8000, 你将把你的请求发送到宇宙中...
我们接收到了一个用原始膜发送讯号的文明, 这个文明竟然完全不知道宇宙的黑暗森林法则, 我们暂不清理她, 观察下这个文明的状态
由于服务端没有给客户端响应, 因为客户端一直在等待响应
http 服务. gif
当我们的请求被三体星获取到后, 三体人由于自己的母星不宜生存, 在 ETO 组织的协助下, 三体星准备入侵地球, 以下是 ETO 与三体星的通信:
三体指令
- let http = require('http')
- let fs = require('fs')
- // 创建一个 web 服务器
- let server = http.createServer()
- server.on('request', function (req, res) {
- let url = req.url
- if (url === '/') {
- // 设置编码格式, 避免中文乱码
- res.setHeader('Content-Type', 'text/plain; charset=utf-8')
- res.end('欢迎来到三体世界')
- } else if (url === '/point') {
- console.log('地球人不知道有黑暗森林的存在, 叶文洁悟出了这个道理, 并启发了罗辑, 我们要让 ETO 杀了罗辑')
- fs.readFile('./data/threeBody.html', function (err, data) {
- if (err) {
- res.setHeader('Content-Type', 'text/plain; charset=utf-8')
- res.end('星际网络出故障了, 文件读取不到')
- } else {
- // 发送 html 文件, 需要表示文件头是 text/html
- res.setHeader('Content-Type', 'text/html; charset=utf-8')
- res.end(data)
- }
- })
- } else if (url === '/photo') {
- console.log('ETO 要看我们的星际环境, 给他们传送张图片吧')
- fs.readFile('./data/threeBody.jpeg', function (err, data) {
- if (err) {
- res.setHeader('Content-Type', 'text/plain; charset=utf-8')
- res.end('星际网络出故障了, 图片读取不到')
- } else {
- // 发送图片用的是二进制格式
- res.end(data)
- }
- })
- } else {
- res.setHeader('Content-Type', 'text/plain; charset=utf-8')
- res.end('消息已沉入茫茫宇宙中...')
- }
- })
- // 自定义端口
- let port = 8000
- server.listen(port, function () {
- console.log('与三体的通信又搭建成功, 在浏览器访问: http://127.0.0.1:' + port)
- })
三体通信服务. gif
每次改动服务端的代码, 都需要重启服务
关于 http 模块的 api 使用说明, 详见 http 模块文档 https://nodejs.org/dist/latest-v8.x/docs/api/http.html
来源: http://www.jianshu.com/p/1cee5202d744