在单个服务器上支持多个协议

时间:2015-01-29 07:11:15

标签: node.js websocket socket.io

我有一个有效的Express HTTP服务器以及一个有效的websocket服务器。我想将websockets应用程序添加到我的常规网站,该网站由HTTP服务器运行,但我不确定我是否理解文档。我可以拥有一个接受多种协议的服务器吗?在这种情况下我如何处理路由? socketio的npmjs文档说:

In conjunction with Express
Starting with 3.0, express applications have become request handler functions that you pass to http or http Server instances. You need to pass the Server to socket.io, and not the express application function.

var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
io.on('connection', function(){ /* … */ });
server.listen(3000);

我可以通过app.HTTPverbHere()和websocket请求通过io.on处理HTTP请求吗?

1 个答案:

答案 0 :(得分:1)

socket.io documentation向您展示了使socket.io在同一服务器上使用nodejs express所需的确切步骤。

所以,是的,你可以这样做。

实际上,每个webSocket连接都以HTTP请求(然后升级到webSocket协议)开始,因此您必须在服务器上运行Web服务器,无论如何都要处理webSockets。

socket.io只是挂接到快速Web服务器上的一个路由,该路由用于启动所有socket.io webSocket连接并从那里处理事务。

以下是直接从socket.io doc:

获取的一个示例
var app = require('express').createServer();
var io = require('socket.io')(app);

app.listen(80);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});