【发布时间】:2018-05-02 17:10:59
【问题描述】:
我将 SocketIo 与 Nodejs、Express 服务器和 MongoDB 一起使用,我遵循了文档。它在连接多个客户端时工作正常,它们可以毫无问题地相互发送消息。当我发出 Http 请求时,我无法连接任何新客户端并出现此错误。
socket.io.js:7370 WebSocket 连接到 'ws://localhost:28232/socket.io/?userId=userAmr&EIO=3&transport=websocket&sid=wNTTgrUD-PSeNaIcAAAF' 失败:WebSocket 握手期间出错:意外的响应代码: 400
在Http请求之前连接的其他用户可以继续发送消息,没有任何问题。
我调试了 Socket 库,发现客户端套接字请求 go to connect 函数然后触发 errorCode:1
这是我的代码
/**
* Create Express server.
*/
const app = express();
// API endpoint
app.get('/api/test',(req,res)=>{
res.status(200).send({test:"test"});
});
/**
* Init socket
*/
// the following line not working too
// const server = require('http').createServer(app);
const server = require('http').Server(app);
const io = require('socket.io')(server);
io.on('connection', (socket) => {
// emit message to group
socket.on('emitMessage', (data) => {
io.emit('emitMessage', data);
});
});
客户端代码
import { Injectable } from '@angular/core';
import * as io from "socket.io-client/dist/socket.io.js"
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class AppSocketService {
private url = 'http://localhost:28232';
private socket;
constructor() {
}
connect(){
this.socket = io(this.url,{
query:{userid:"123"},
forceNew:true,
'force new connection': true,
autoConnect: true,
reconnectionDelay: 1000,
timeout: 100000,
reconnectionDelayMax: 5000,});
this.socket.on('connect', () => {
console.log("connect",{"socketId":this.socket.id});
this.startListening();
});
}
startListening(){
this.socket.on('emitMessage', (data) => {
console.log(data);
});
}
emitMessage(message){
this.socket.emit('emitMessage', {message});
}
}
客户端版本:"socket.io-client": "^1.7.3"
服务器版本:"socket.io": "^1.7.3"
【问题讨论】:
-
能否请您发布您绑定 Socket.io 实例的服务器配置的相关部分?
-
@BinUry 代码添加
-
请显示连接socket.io连接的客户端代码。
-
@jfriend00,添加了客户端代码,我认为客户端没有问题,因为它已经在 HTTP 请求之前工作了
-
您是否在客户端和服务器上运行完全相同版本的 socket.io?