简体   繁体   English

Express-Socket.io连接不起作用

[英]Express - Socket.io connection is not working

I am a beginner in express and angularjs . 我是expressangularjs的初学者。 I have an express server and I want my web client to connect to: This is the code: 我有一个express服务器,希望我的Web客户端连接到:这是代码:

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


var port = 4000;

app.use(express.static('.'));


app.get('/', function (req, res) {
  res.sendFile( './index.html');
});

io.on('connection', function(client) {  
  console.log('Client connected...');

  client.on('join', function(data) {
    console.log(data);
  });

  client.on('join', function(data) {
    console.log(data);
    client.emit('messages', 'Hello from server');
  });


});

server.listen(port, '0.0.0.0');
console.log("App listening on port " + port);

This is the client: 这是客户:

 <script src="/src/bower_components/angular-socket-io/mock/socket-io.js"></script> <script src="/src/bower_components/angular-socket-io/socket.js"></script> <script> var socket = io.connect(); console.log(socket); console.log("socket.io : "); socket.on('connect', function(data) { socket.emit('join', 'Hello World from client'); }); </script> 

I am trying to make it work. 我正在努力使它工作。 But when I reload the webpage, it seems like client don't event try to connect to server. 但是当我重新加载网页时,似乎客户端没有事件尝试连接到服务器。 Event if a put wrong address, there is not reaction. 事件如果放错地址,则没有反应。 Can someone helps me ? 有人可以帮我吗?

The thing that is preventing the client from sending out that 'join' event to the server is that you don't need to put the socket.emit logic inside of a 'connect' event. 阻止客户端将“加入”事件发送到服务器的原因是您不需要将socket.emit逻辑放在“连接”事件内部。 After you make your socket on the client side, you are already connected. 在客户端上建立套接字后,您已经建立连接。 So try this: 所以试试这个:

<script src="/src/bower_components/angular-socket-io/mock/socket-io.js"></script>
<script src="/src/bower_components/angular-socket-io/socket.js"></script>
<script>  
  var socket = io.connect();
    console.log(socket);
    console.log("socket.io : ");
    socket.emit('join', 'Hello World from client');
</script>

Also, inside the app.js, it seems that you're subscribing to the 'join' event twice. 另外,在app.js中,似乎您在两次订阅'join'事件。 This is unnecessary, you only need to subscribe to an event once. 这是不必要的,您只需要订阅一次事件。 For example: 例如:

io.on('connection', function(client) {  

  client.on('join', function(data) {
    console.log(data);
    client.emit('messages', 'Hello from server');
  });

});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM