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

前端之家收集整理的这篇文章主要介绍了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)

服务器

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

  1. // ----- socketio.js -----
  2.  
  3. // When the user connects.. perform this
  4. function onConnect(socket) {
  5. // When the client emits 'info',this listens and executes
  6. socket.on('info',function (data) {
  7. console.info('[%s] %s',socket.address,JSON.stringify(data,null,2));
  8. socket.emit('pong','OK!');
  9. });
  10. // Insert sockets below
  11. require('../api/thing/thing.socket').register(socket);
  12. }
  13.  
  14. socketio.set('origins','http://localhost:9007');
  15.  
  16. // ----- express.js -----
  17.  
  18. app.use(function (req,res,next) {
  19. res.setHeader('Access-Control-Allow-Origin','http://localhost:9007');
  20. res.setHeader('Access-Control-Allow-Methods','GET,POST,OPTIONS,PUT,PATCH,DELETE');
  21. res.setHeader('Access-Control-Allow-Credentials',true);
  22. next();
  23. });
  24.  
  25. // ----- app.js -----
  26.  
  27. // Start server
  28. server.listen(config.port,config.ip,function () {
  29. console.log('Express server listening on %d,in %s mode',config.port,app.get('env'));
  30. });

客户

  1. // ----- client app.js
  2.  
  3. angular
  4. .module('weldCommentsClientApp',[
  5. 'ngAnimate','ngAria','ngCookies','ngMessages','ngResource','ngRoute','ngSanitize','ngTouch','btford.socket-io'
  6. ])
  7. .factory('mySocket',function (socketFactory) {
  8. var myIoSocket = window.io.connect('http://localhost:9006');
  9. var mySocket = socketFactory({
  10. ioSocket: myIoSocket
  11. });
  12. mySocket.forward('pong');
  13. console.log('mySocket',mySocket);
  14. return mySocket;
  15. })
  16.  
  17. // ----- client main.js
  18.  
  19. angular.module('weldCommentsClientApp').controller('MainCtrl',function ($scope,mySocket) {
  20. $scope.$on('socket:pong',function (ev,data) {
  21. console.log('socket:pong',ev,data);
  22. });
  23. mySocket.emit('info');
  24. });

结果

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

  1. 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’路径,如下所示:

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

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

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

猜你在找的JavaScript相关文章