在单个服务器上支持多种协议
support multiple protocols on single server
我有一个工作的 Express HTTP 服务器和一个工作的 websocket 服务器。我想通过 HTTP 服务器将 websockets 应用程序添加到我的常规网站 运行,但我不确定我是否理解文档。我可以拥有一个接受多种协议的服务器吗?在这种情况下我将如何处理路由? 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() 处理 HTTP 请求并通过 io.on 处理 websocket 请求吗?
socket.io documentation 向您展示了使 socket.io 在同一台服务器上与 nodejs express 一起工作所需的确切步骤。
所以,是的,你可以做到这一点。
事实上,每个 webSocket 连接都以 HTTP 请求(然后升级到 webSocket 协议)开始,因此无论如何您都必须在处理 webSocket 的服务器上有一个 Web 服务器 运行。
socket.io 只是挂接到用于启动所有 socket.io webSocket 连接并从那里处理事情的快速 Web 服务器上的一个路由。
这是直接取自 socket.io 文档的一个示例:
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);
});
});
我有一个工作的 Express HTTP 服务器和一个工作的 websocket 服务器。我想通过 HTTP 服务器将 websockets 应用程序添加到我的常规网站 运行,但我不确定我是否理解文档。我可以拥有一个接受多种协议的服务器吗?在这种情况下我将如何处理路由? 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() 处理 HTTP 请求并通过 io.on 处理 websocket 请求吗?
socket.io documentation 向您展示了使 socket.io 在同一台服务器上与 nodejs express 一起工作所需的确切步骤。
所以,是的,你可以做到这一点。
事实上,每个 webSocket 连接都以 HTTP 请求(然后升级到 webSocket 协议)开始,因此无论如何您都必须在处理 webSocket 的服务器上有一个 Web 服务器 运行。
socket.io 只是挂接到用于启动所有 socket.io webSocket 连接并从那里处理事情的快速 Web 服务器上的一个路由。
这是直接取自 socket.io 文档的一个示例:
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);
});
});