节点.js Websocket 服务器无法联机工作

Node.js Websocket server won't work online

本文关键字:联机 工作 服务器 js Websocket 节点      更新时间:2023-09-26

我正在为HTML5 + PHP的游戏实现一个非常简单的Node.js Websocket服务器。我在本地测试了我的服务器并且工作正常,但是当我部署我的服务器和客户端(当然在不同的域中)时,我就是无法连接它们。我在 https://evennode.com 部署了服务器。我是 Node.js 的新手,也许我的代码中缺少一些东西。

var users = [];
var WebSocketServer = require('ws').Server;
var connections = {};
var registered  = {}; 
var connectionIDCounter = 0;
var port = process.env.PORT || 80;
var wss = new WebSocketServer({port: port}, function(){
    console.log('Listening on port: ' + port);
});
wss.on('connection', function(socket) {
    socket.id = connectionIDCounter ++;
    connections[socket.id] = socket;
    registered[socket.id] = 'Guest' + socket.id;
    connections[socket.id].position = {};
    connections[socket.id].position.x = 0;
    connections[socket.id].position.y = 1.8;
    connections[socket.id].position.z = 0;
    console.log('Connected: ' + socket.id);
    socket.on('message', function(message) {
        var resultObject = JSON.parse(message);
        parseMessage(this.id, resultObject);        
    });
    socket.on('close', function(message) {
        sendUserState(this.id, 'disconnected'); 
        delete registered[this.id];
        delete connections[this.id];    
    });
}); 

我几乎没有帮助,将不胜感激。

www.evennode.com 的主机使用Phusion Passenger 来运行Node.js应用程序,而这些应用程序又使用反向端口绑定(如作者在这里提到的),这使得此示例在由 evennode.com 托管时不起作用。

不过,有一种方法可以使它即使在"反向端口绑定"的情况下也能正常工作。
首先需要创建一个http服务器,然后将其传递给ws构造函数。

下面是一个简化的示例:

var server = require('http').createServer();
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({server: server}, function(){});
server.listen(3000);
wss.on('connection', function(socket) {
  ...
});

希望这有助于解决问题。
顺便说一句,如果有人感兴趣,还有一个例子 Socket.io。