socket.io服务器和客户端之间没有通信

时间:2016-09-21 14:29:36

标签: node.js express angular socket.io

我目前正在尝试将一个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()中缺少第二个参数。现在它起作用了,非常感谢你:))

2 个答案:

答案 0 :(得分:0)

我没有调试你的代码,而是发布一个有效的例子,你可以从那里开始:

Socket.IO Server

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

select D2.*
from Dataset D2
inner join (   

select StudentID, count(incidentCode)
from Dataset
where IncidentID >1
group by StudentID
having count(incidentCode) >1
) A1
on A1.StudentID = D2.StudentID

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

Socket.IO客户端

使用vanilla JavaScript的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.html

该示例可以是installed from npmdownloaded from GitHub。它已经变得如此简单并且已知它可以工作,因此您可以使用工作后端部件来测试您的前端。

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

答案 1 :(得分:0)

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

试试这个:

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