【发布时间】:2016-01-15 22:41:22
【问题描述】:
试图启动一个使用 sock.js 进行 websocket 通信的节点服务器。
可以正常启动服务器并建立websocket通信。但是,我们还需要使用 HTTP POST 到这个实例,以便我们可以通过 websocket 发送消息。消息取决于 POST 有效负载...
但是,sock.js 似乎不接受我们正在创建的处理程序,并且只允许 GET 方法。这会导致对服务器执行的任何 POST 都会出现 405 HTTP 代码。
请看下面的代码。如果我删除了 sock.js 实现,我就可以使用服务器处理 GET 和 POST 请求。
var app = require('http');
var sockjs = require('sockjs');
var sk = sockjs.createServer({ sockjs_url: '//cdn.jsdelivr.net/sockjs/1.0.1/sockjs.min.js' });
sk.on('connection', function (conn) {
console.log('connection' + conn);
conn.on('close', function () {
console.log('close ' + conn);
});
conn.on('data', function (message) {
console.log('message ' + conn,
message);
conn.write(message);
});
});
var server = app.createServer( function(req, res) {
if (req.method == 'POST') {
console.log("POST");
var body = '';
req.on('data', function (data) {
body += data;
console.log("Partial body: " + body);
});
req.on('end', function () {
console.log("Body: " + body);
});
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('post received');
}
else
{
console.log("GET");
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('get received');
}
});
sk.installHandlers(server);
我尝试了不同的方法来设置处理程序,包括遵循示例here;但无论如何,我似乎并没有陷入我的处理程序,而是 sock.js 不允许 POST。
如果这是 sock.js 的预期行为并且正在按照预期的方式工作,那么我们将不胜感激有关使用什么的建议。这是一种远离 socket.io 的尝试,因为这对我们来说并非在所有情况下都有效......但是如果无法 POST 到节点服务器,我们可能也无法使用 sock.js。
【问题讨论】:
-
这并不能完全回答问题,但你不能在不同的端口上运行它们吗?
-
我建议您为变量使用更具描述性的名称...
app令人困惑,您可能应该改用http。同上server->httpserver。 -
@jcaron,我同意命名。这只是一个原型,让我了解它是如何工作的。生产代码将被更恰当地命名。谢谢!
标签: javascript node.js websocket sockjs