【问题标题】:socket.io no communication between server and clientsocket.io 服务器和客户端之间没有通信
【发布时间】:2017-01-29 20:59:58
【问题描述】:

我目前正在尝试让 angular2 前端与带有 socket.io 的 node.js 后端进行通信。 关键是,我让客户端连接到服务器,但在那之后,它们之间无法成功传递套接字调用。 这是一个简单的服务器代码:

var app = require('express')();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);

io.on('connection', function() {
    io.emit('update');
    console.log('Connected');
});
io.on('updated', function() {
    io.emit('update');
    console.log('Updated');
});

server.listen(5000, function() {
    console.log('Listening on 5000');
});

...对于组件:

import { Component } from '@angular/core';

import * as io from 'socket.io-client';

@Component({
  selector: 'main-app',
  template: `
  <div>
  <button (click)="foo()"
           style='padding:20px; background:red; color:white'>
    click me
  </button>
  </div>
  `
})
export class AppComponent {
  title = 'bar';
  socket = null;

  constructor() {
    let self = this;
      self.socket = io.connect('http://mysuperwebsite:5000', {
          transports : ["websocket"]
      });
      self.socket.on('update', function(data) {
        console.log(data);
      });
  }

  foo() {
    let self = this;
    self.socket.emit('updated', {});
  }
}

我不知道哪里出了问题,我猜你会的;) 感谢您的帮助!

编辑:最后,问题似乎来自 io.emit() 中缺少第二个参数。现在可以了,非常感谢你:)

【问题讨论】:

  • 以下任何答案是否有助于您找到问题?如果是这样,那么您可以考虑accepting the answer,因为现在其他搜索此问题的人看到您的问题没有好的答案并且可能不会阅读。如果没有,那么您应该对它们发表评论,以便可以改进它们。谢谢。

标签: node.js express angular socket.io


【解决方案1】:

我将向您发布一个有效的示例,而不是调试您的代码,您可以从那里开始:

Socket.IO 服务器

使用 Express.js 的 Socket.IO 服务器示例:

var path = require('path');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', (req, res) => {
  console.error('express connection');
  res.sendFile(path.join(__dirname, 'si.html'));
});
io.on('connection', s => {
  console.error('socket.io connection');
  for (var t = 0; t < 3; t++)
    setTimeout(() => s.emit('message', 'message from server'), 1000*t);
});
http.listen(3002, () => console.error('listening on http://localhost:3002/'));
console.error('socket.io example');

来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js

Socket.IO 客户端

使用原生 JavaScript 的 Socket.IO 客户端示例:

var l = document.getElementById('l');
var log = function (m) {
    var i = document.createElement('li');
    i.innerText = new Date().toISOString()+' '+m;
    l.appendChild(i);
}
log('opening socket.io connection');
var s = io();
s.on('connect_error', function (m) { log("error"); });
s.on('connect', function (m) { log("socket.io connection open"); });
s.on('message', function (m) { log(m); });

来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.html

该示例可以是 installed from npmdownloaded from GitHub。它非常简单,而且众所周知,它可以工作,因此您可以拥有一个可以工作的后端部件来测试您的前端。

它是为this answer 写的 - 你可以在那里找到更多信息。

【讨论】:

    【解决方案2】:

    您的服务器设置似乎不正确。

    试试这个:

    io.on('connection', function(socket) {
      socket.emit('update');
      console.log('Connected');
      socket.on('updated', function() {
        socket.emit('update');
        console.log('Updated');
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2011-08-18
      相关资源
      最近更新 更多