尝试启动使用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要么。
答案 0 :(得分:0)
您在prefix
的来电中错过了installHandlers
。这导致sockjs
处理所有请求,而不仅仅是那些发往它的请求。
只需指定一个前缀:
sk.installHandler(server,{prefix:"/whatever"});
它当然应该与您使用客户端的前缀相匹配。
或者,如果您不想使用前缀,请使用不同的端口。