javascript – WebSocket连接失败:WebSocket握手期间出错:意外的响应代码:400
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – WebSocket连接失败:WebSocket握手期间出错:意外的响应代码:400,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2432字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试将Socket.io与Angular集成,并且我很难从客户端到服务器建立连接.我查看了其他相关问题,但我的问题是在本地发生的,所以中间没有Web服务器.
这就是我的服务器代码:
const app = express();
const server = http.createServer(app);
const io = require('socket.io').listen(server);
io.on('connection', function(socket) {
socket.emit('greet', { hello: 'Hey, Mr.Client!' });
socket.on('respond', function(data) {
console.log(data);
});
socket.on('disconnect', function() {
console.log('Socket disconnected');
});
});
我按以下顺序使用Grunt加载客户端JavaScript文件:
dist: {
src: [
public/bower_components/angular/angular.min.js,
...
public/bower_components/socket.io-client/dist/socket.io.min.js,
public/bower_components/angular-socket-io/socket.min.js,
...
]
}
然后在我的控制器中:
function MyController($scope) {
let socket = io.connect(window.location.href);
socket.connect('http://localhost:3000');
socket.on('greet', function(data) {
console.log(data);
socket.emit('respond', { message: 'Hello to you too, Mr.Server!' });
});
...
}
在实际使用btford / angular-socket-io库之前,我想确保我能正确获得连接,但是在控制台中出现以下错误:
有趣的是,如果我重新启动Node.js服务器进程,它确实设法发送消息但使用轮询而不是websockets.
我在socket.connect调用中尝试了各种不同的选项,但没有任何效果.
任何帮助,将不胜感激.
更新(2016年12月30日):
我刚刚意识到websockets部分工作.我在Chrome开发者控制台中看到了101切换协议请求.但是我看到的唯一框架是engine.io协议包(ping,pong).但是我的应用程序套接字消息仍然由于某种原因而退回到轮询…
解决方法:
问题解决了!我只是弄清楚如何解决这个问题,但我仍然想知道这是否是正常行为.
似乎即使Websocket连接正确建立(由101交换协议请求指示),它仍然默认为长轮询.修复就像将此选项添加到Socket.io连接函数一样简单:
{transports: ['websocket']}
所以代码最终看起来像这样:
const app = express();
const server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', function(socket) {
console.log('connected socket!');
socket.on('greet', function(data) {
console.log(data);
socket.emit('respond', { hello: 'Hey, Mr.Client!' });
});
socket.on('disconnect', function() {
console.log('Socket disconnected');
});
});
在客户端:
var socket = io('ws://localhost:3000', {transports: ['websocket']});
socket.on('connect', function () {
console.log('connected!');
socket.emit('greet', { message: 'Hello Mr.Server!' });
});
socket.on('respond', function (data) {
console.log(data);
});
消息现在显示为框架:
这个Github issue指出了我正确的方向.感谢所有帮帮忙的人!
内容总结
以上是互联网集市为您收集整理的javascript – WebSocket连接失败:WebSocket握手期间出错:意外的响应代码:400全部内容,希望文章能够帮你解决javascript – WebSocket连接失败:WebSocket握手期间出错:意外的响应代码:400所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。