所以我将app.listen移到了顶部,但现在它给了我一个错误,该端口正在使用中。我相信这是因为我在这个端口上设置了我的websocket,但是我该怎么做呢?
var server = require('websocket').server, http = require('http');
var express = require('express');
var app = express();
app.listen(8080);
var socket = new server({
httpServer: http.createServer().listen(8080)
});
socket.on('request', function(request) {
var connection = request.accept(null, request.origin);
app.get('/', function(request, response) {
var id = request.query.steamid;
console.log("STEAMID:",id);
response.send("I have received the ID: " + id);
});
connection.on('message', function(message) {
connection.sendUTF(message);
});
connection.on('close', function(connection) {
console.log('connection closed');
});
});
答案 0 :(得分:0)
我认为你需要在connection
而非request
socket.on('connection', function(sock) {
sock.on('message', function(message) {
sock.send(message);
});
sock.on('close', function() {
console.log('connection closed');
});
});
答案 1 :(得分:0)
将app.listen(3000);
置于请求事件之外。
所以,你的快递服务器有机会初始化端口来监听。
目前它处于request event
的回调状态,一旦建立了web-socket的客户端 - 服务器连接,它就会被调用。
就URL问题而言
ws://localhost:8080/?steamid=123456789
您已将websocket配置为侦听端口8080.但是您的快速配置为侦听端口3000.因此,无法捕获在不同端口上配置的快速服务器上的请求,该请求是通过在另一个不同端口上配置的Web套接字请求的。
url应该是这样的。
http://localhost:3000/?steamid=123456789
因为您的快速服务器使用http protocol and not websocket