Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 两个人不能在一个简单的协作文档中同时键入_Javascript_Html_Node.js_Socket.io - Fatal编程技术网

Javascript 两个人不能在一个简单的协作文档中同时键入

Javascript 两个人不能在一个简单的协作文档中同时键入,javascript,html,node.js,socket.io,Javascript,Html,Node.js,Socket.io,这是我的密码 server.js var http = require('http'); var app = require('express')(); var server = http.createServer(app).listen(process.env.PORT, process.env.IP); var io = require('socket.io').listen(server); var textData = "some random initial text that wi

这是我的密码

server.js

var http = require('http');
var app = require('express')();
var server = http.createServer(app).listen(process.env.PORT, process.env.IP);
var io = require('socket.io').listen(server);

var textData = "some random initial text that will be changed forever, never to be restored to its original state."

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

var users = 0;

io.on('connection', function(socket){
    users++;
    console.log(users + " users are here.");


    //broadcast recieved data

    socket.on('textChange', function(text){
        textData = text;
        socket.broadcast.emit('updatedText', textData);
    });



    socket.on("disconnect", function(){
        users--;
        console.log(users + " users are here.");
    })

});
index.html

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>
    /* global io */
        var socket = io();
        $(document).ready(function() {


            //send value on key up

            $('#textarea').keyup(function(){
               socket.emit('textChange', $('#textarea').val());
            });

            //recieve changed value

            socket.on('updatedText', function(text){
                $('#textarea').val(text);
            });

        });
    </script>
    <style type="text/css">
        form, form * {
            width: 100%;
            height: 400px;
        }
    </style>
</head>

<body>

    <h1>HELLO</h1>  
    <h2></h2>
    <form action="">
        <textarea id="textarea"></textarea>
    </form>  
</body>

</html>
它的工作原理与inteded一样,但当两个人同时打字时,它会在他们之间交替进行,然后跳出去。我怎样才能让两个人一起打字呢。 我正在考虑使用diff补丁,但我不确定它是否能解决这个问题。
请帮助。

也许您可以添加一些用户标识。sessionid或uuid或其他识别用户的东西,等等:

// add user id
var user = Math.random();

$('#textarea').keyup(function(){
    socket.emit('textChange', {name: user, val: $('#textarea').val()});
});

//recieve changed value
socket.on('updatedText', function(text){
    if (text.user == user) {
        $('#textarea').val(text.val);
    }
});