Javascript 两个人不能在一个简单的协作文档中同时键入
这是我的密码 server.jsJavascript 两个人不能在一个简单的协作文档中同时键入,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
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);
}
});