官网上有一个这样的示例(http://socket.io/docs/):
此处,说明是会创建一个http请求,但是我没明白,这个请求创建了之后,要怎么访问呢,我看代码engine.io.js里,有这样一段代码:
function listen(port, options, fn) {
if (‘function’ == typeof options) {
fn = options;
options = {};
}
var server = http.createServer(function (req, res) {
res.writeHead(501);
res.end('Not Implemented');
});
server.listen(port, fn);
// create engine server
var engine = exports.attach(server, options);
engine.httpServer = server;
return engine;
};
创建的一个501请求,但是这样创建的一个,用什么方法可以访问呢??
还有就是如果才能触发 connection事件呢??
一直没搞明白这两个问题
按我的理解是,创建了一个HTTP服务,然后通过浏览器去访问,然后再通过客户端的 var socket = io(‘http://localhost’);来建立长链接,然后触发后端的才能触发connection事件。
但是,最上面的代码,不清楚在哪个地方可以触发事件,并且怎么访问建立的HTTP服务!请知道的解答一下,谢谢
ringa_lee2017-04-17 11:35:41
按我的理解是,创建了一个HTTP服务,然后通过浏览器去访问,然后再通过客户端的 var socket = io(‘http://localhost’);来建立长链接,然后触发后端的才能触发connection事件。
这个理解是错误的。题主应该是认为 /chat
这个 URL 可以直接通过浏览器访问吧,这是不对的,这个 URL 只是 socket.io 的一个 channel,并非真实 URL。
Socket.io 的那个例子漏掉了很重要的一段,即下面这些代码,它的作用是返回一个 html 页面,页面的内容即是 client 的 index.html。
javascript
// 这段代码直接来自 socket.io 的第一个例子:Using with Node http server var app = require('http').createServer(handler) var io = require('socket.io')(app); var fs = require('fs'); app.listen(80); function handler (req, res) { fs.readFile(__dirname + '/index.html', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); }); }
写了这段代码之后才能实现完整的 socket.io 客户端/服务端流程:
/
,得到 index.html
;index.html
里调用 io.connect('http://localhost/chat')
创建连接;/chat
channel 的 connection 事件,执行 chat.on('connection')
的代码。var io = require('socket.io').listen(80);
这段代码就是个坑人的存在,对初学者来说就是个*。实际上使用 socket.io 的时候不会这么写,一般是以那三个 Using with...
的用法之一来提供服务。