节点js简单的聊天应用程序延迟事件触发器

时间:2018-04-09 12:48:26

标签: javascript node.js socket.io

我在练习node.js时准备了一个简单的聊天系统。但发送邮件时遇到问题。发送消息时发生了相当多的延迟,我无法弄清楚原因。任何人都可以帮我改进附加代码吗?

server.js

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(request, response) {
    response.sendFile(__dirname + '/index.html');
});

io.on('connection', function(client) {
    client.on('messageSend', function(data) {
        client.broadcast.emit('messageRecieve', data);
    });
});

http.listen(9090, function() {
    console.log('Listening on port 9090');
    io.on('connect', function(socket) {
        console.log("Connection established : " + socket.client.conn.remoteAddress);
    })
});

的index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Socket Test</title>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io();
        function messageSend() {
            var message = document.getElementById("messageInput").value;
            console.log(message);
            var ul = document.getElementById("messageNode");
            var li = document.createElement("li");
            li.appendChild(document.createTextNode(message));
            li.setAttribute("style", "font-style : italic; color : red;");
            ul.appendChild(li);
            socket.emit('messageSend', message);
        }

        socket.on('messageRecieve', function(data) {
            var message = data;
            var ul = document.getElementById("messageNode");
            var li = document.createElement("li");
            li.appendChild(document.createTextNode(message));
            ul.appendChild(li);
            console.log(message);
        });

    </script>
</head>
<body>
<input id="messageInput" type="text"> <button onclick="messageSend()">Send</button><br>
<ul id="messageNode">

</ul>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

官方socket.io示例将消息发送给所有人,包括您自己

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

您发送给除了您自己以外的所有人(这是最准确的方法)

io.on('connection', function(client) {
    client.on('messageSend', function(data) {
        client.broadcast.emit('messageRecieve', data);
    });
});

您放慢速度的原因可能是因为您的浏览器将您的焦点外标签置于某种睡眠模式,这使得更新频率更低......如果您在计算机之间比较代码与socket.io的代码和通过局域网的电话。我猜你的服务器发送消息的速度是相同的

现在你基本上与socket.io的“乐观更新”竞争。它直接将消息推送到您的客户端,而无需等待您自己的代码所执行的服务器。以及浏览器离焦低优先级模式