gpt4 book ai didi

javascript - Socket.io 无法连接,求助于 "polling"

转载 作者:IT老高 更新时间:2023-10-28 23:10:44 30 4
gpt4 key购买 nike

我正在尝试创建一个 websocket 客户端-服务器应用程序,其中客户端和服务器将在两个不同的实例上运行。

设置

Client and server

服务器

注意:不是完整的代码,但我认为相关的部分。

// ----- socketio.js -----

// When the user connects.. perform this
function onConnect(socket) {
// When the client emits 'info', this listens and executes
socket.on('info', function (data) {
console.info('[%s] %s', socket.address, JSON.stringify(data, null, 2));
socket.emit('pong', 'OK!');
});
// Insert sockets below
require('../api/thing/thing.socket').register(socket);
}

socketio.set('origins', 'http://localhost:9007');

// ----- express.js -----

app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:9007');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});

// ----- app.js -----

// Start server
server.listen(config.port, config.ip, function () {
console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});

客户

// ----- client app.js

angular
.module('weldCommentsClientApp', [
'ngAnimate', 'ngAria', 'ngCookies', 'ngMessages', 'ngResource', 'ngRoute', 'ngSanitize', 'ngTouch',
'btford.socket-io'
])
.factory('mySocket', function (socketFactory) {
var myIoSocket = window.io.connect('http://localhost:9006');
var mySocket = socketFactory({
ioSocket: myIoSocket
});
mySocket.forward('pong');
console.log('mySocket', mySocket);
return mySocket;
})

// ----- client main.js

angular.module('weldCommentsClientApp').controller('MainCtrl', function ($scope, mySocket) {
$scope.$on('socket:pong', function (ev, data) {
console.log('socket:pong', ev, data);
});
mySocket.emit('info');
});

结果

服务器和客户端都没有控制台错误,但它不起作用,服务器记录了 100 条以下行:

GET /socket.io/?EIO=3&transport=polling&t=1421488528935-16027 200 2ms

...看起来客户端通过 HTTP 连接,但无法切换到 websockets。

有什么想法吗?

更新

这是整个客户端/服务器项目,自述文件中有说明:https://github.com/weld-io/socket.io-client-server-boilerplate

最佳答案

server/app.js 中路径定义不正确

尝试像这样使用“/socket.io”路径:

var socketio = require('socket.io')(server, {
serveClient: (config.env === 'production') ? false : true,
path: '/socket.io'
});

接下来,要选择 websockets 而不是长轮询,您可以在 test-client/scripts/application.js 中选择 websocket 传输

var myIoSocket = window.io.connect('http://localhost:9006', {transports:['websocket']});

关于javascript - Socket.io 无法连接,求助于 "polling",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27998407/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com