微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Socket.io无法连接,使用“轮询”

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

建立

>服务器/后端:在本地主机上运行:9006与angular-fullstack generator包括socket.io
>客户端/前端:在localhost上运行:9007 with angular generator socket.io-client btford.socket-io(AngularJS socket.io bridge)

服务器

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

// ----- 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.

有任何想法吗?

更新

这是整个客户端/服务器项目,其中包含README:https://github.com/weld-io/socket.io-client-server-boilerplate中的说明

解决方法

服务器/ 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']});

原文地址:https://www.jb51.cc/js/153244.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐