在开发过程中,能够很好地查看数据包到达和发送的内容对我有很大帮助.这可以在带有记录器的服务器端进行.但是,在客户端,没有记录器.我发现自己在整个地方乱扔垃圾.
是否可以使用console.log(参数)覆盖socket.emit和socket.on?如果我可以在我的套接字之前覆盖它,那将非常优雅.
有人建议我改写Parser.
你的2点是什么?
编辑
我尝试了加藤的建议并写了以下内容:
var _origEmit = socket.emit;
socket.emit = function() {
console.log("SENT", Array.prototype.slice.call(arguments));
_origEmit.call(socket, arguments);
};
Run Code Online (Sandbox Code Playgroud)
这有效.但是,与socket.on没那么多.我的策略是用console.log包装每个回调.如果您了解python,则有点像将函数修饰符放在console.log参数的回调上.
(function(socket) {
var _origOn = socket.on;
socket.on = function() {
var args = Array.prototype.slice.call(arguments)
, handlerType = args[0]
, originalCallback = args[1];
var wrappedCallback = function() {
// replace original callback with a function
// wrapped around by console.log
console.log("RECEIVED", Array.prototype.slice.call(arguments));
originalCallback.call(socket, arguments);
}
_origOn.call(socket, [handlerType, wrappedCallback]);
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出为什么猴子修补socket.on不工作?
我正在搞乱socket.io和node.js,并想知道如何完成以下操作:我有一个简单的表单,它将一个文本字符串发送到服务器,然后服务器将其发送回来,并将其附加到div .我想要做的是为所有浏览器中的所有用户提供div更新,目前它只更新发送消息的那个用户.
来自app.js(node.js服务器)的代码:
io.sockets.on('connection', function(socket) {
socket.on('send_message', function(data) {
data.message = data.message + ' yo<br/>';
socket.emit('get_message',data);
});
});
Run Code Online (Sandbox Code Playgroud)
客户端的代码:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
$(document).ready(function() {
var socket = io.connect('http://localhost:3000');
$('#sender').live('click',function() {
var user_message = $('#message_box').val()
socket.emit('send_message',{message: user_message});
});
socket.on('get_message', function(data) {
$('#data').append(data.message);
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
和HTML:
<div id='data'></div>
<input type='text' id='message_box' placeholder='send message'>
<button id='sender'>Send Message</button>
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能将消息发送到多个浏览器?