Node.js Websocket 服务器无法在线工作
Node.js Websocket server won't work online
我正在为 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 uses Phusion Passenger to run Node.js apps which in turn uses inverse port binding (as mentioned e.g. here by the author) 这使得此示例在由 evennode.com.
托管时无法运行
有一种方法可以让它在 "inverse port binding" 就位的情况下也能正常工作。
您首先需要创建一个 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) {
...
});
希望这有助于解决问题。
顺便提一句。还有一个 example with Socket.io 如果有人感兴趣的话。
我正在为 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 uses Phusion Passenger to run Node.js apps which in turn uses inverse port binding (as mentioned e.g. here by the author) 这使得此示例在由 evennode.com.
托管时无法运行有一种方法可以让它在 "inverse port binding" 就位的情况下也能正常工作。
您首先需要创建一个 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) {
...
});
希望这有助于解决问题。
顺便提一句。还有一个 example with Socket.io 如果有人感兴趣的话。