信管家 外汇平台平台为什么开不了户?还能不能正常操作?

标题更新:[用Node实现WebSocket协议] - 原:[WebSocket在高并发和大数据情况下的传输问题] - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
下面是之前遇到的问题:
上周在班里做了关于WebSocket协议的技术分享,因为当时演示的是小数据、间歇性数据发送。所以很成功,并没有遇到啥问题。
不过回去之后发现用一个10000次的循环不断向服务器发送数据时,不论数据的大小,后几千次的数据都变成了乱码:
for (i = 0; i & 10000; i++) ws.send('a');
另外一个问题是,当我发送了一次长度为65535 byte的数据(也就是Payload_len = 126, Payload length = Math.pow(2, 16) - 1),服务器却得到了两次的数据请求:
第一次是FIN = 1, Opcode = 0, Payload length为65535的F
第二次是FIN = 1, Opcode为随机, MASK也是随机的, Payload length还是随机。。。
可是经过查看发现第一次数据的实际长度往往是Payload length值的一半左右,第二次的数据全是乱码。
下面是WebSocket握手结束后数据解码部分的代码:
function decodeFrame(frame) {
var counter = 0;
var fin_offset = 7,
opcode_offset = parseInt(1111, 2),
mask_offset = 7,
payload_len_offset = parseInt();
var FIN = frame[counter] && fin_offset,
Opcode = frame[counter++] & opcode_offset,
MASK = frame[counter] && mask_offset,
Payload_len = frame[counter++] & payload_len_
Payload_len === 126 &&
(Payload_len = frame.readUInt16BE(counter)) &&
counter += 2;
Payload_len === 127 &&
(Payload_len = frame.readUInt32BE(counter + 4)) &&
counter += 8;
var Payload_data = [];
if (MASK) {
var Masking_key = frame.slice(counter, counter + 4);
counter += 4;
for (var i = 0; i & Payload_ i++) {
var j = i % 4;
frame[counter + i] ^= Masking_key[j];
// 这里得到上面说的测试结果
Opcode: Opcode,
MASK: MASK,
Payload_len: Payload_len,
Payload_data: frame.slice(counter, Payload_len)
WebSocket协议还有什么细节需要处理还是Buffer无法瞬间接受过大的数据吗?
一直没想明白这两种情况下乱码究竟是怎么产生的。。
求社区神牛指导啊~~
问题终于解决~
实现WebSocket真够让人纠结的,正确的代码已上传至github :
在这方面遇到麻烦的同学可以参考参考啦~
WebSocket协议本身定义是没有问题的,应该是你的发送端处理或接收端的处理有问题。
恩,已解决,不过这个问题产生的原因确实很蛋疼。。
的确是读取的问题。要在读取时循环调用解码函数。
有现成的的不用:
的确有现成的,后来也读了部分源码,不过还是想自己写个玩玩
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的基于node的webSocket应用 - TonyCoolZhu - 博客园
html推出了webSocket。因为毕业设计要用到聊天室的功能,所以就研究了下webSocket的应用。
在客户端使用websocket需要创建WebSocket对象,通过提供的open、send、message、close等方法实现创建、发送、监听信息、关闭连接。例如下面的代码:
if('WebSocket' in window){
// 创建websocket实例
var socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
socket.send('I am the client and I\'m listening!');
socket.onmessage = function(event) {
console.log('Client received a message',event);
// 关闭监听
socket.onclose = function(event) {
console.log('Client notified socket has closed',event);
//socket.close()
alert('本浏览器不支持WebSocket哦~');}Socket.Io是个JavaScript框架,包括服务器端和客户端,使用统一的API封装了各种实时连接(如WebSocket、Flash Socket、AJAX长轮询等),使得后端的连接可以对开发人员透明。Socket.IO使用检测功能来判断是否建立WebSocket连接,或者是AJAX long-polling连接,或Flash等。可快速创建实时的应用程序。Socket.IO可以从GitHub下载,可以把socket.io.js文件包含到页面中:
&script src="http://cdn.socket.io/stable/socket.io.js"&&/script&
此时,Socket.IO在此页面上是有效的,是时候创建Socket了:
// 创建Socket.IO实例,建立连接
var socket= new io.Socket('localhost',{
port: 8080
socket.connect();
// 添加一个连接监听器
socket.on('connect',function() {
console.log('Client has connected to the server!');
// 添加一个连接监听器
socket.on('message',function(data) {
console.log('Received a message from the server!',data);
// 添加一个关闭连接的监听器
socket.on('disconnect',function() {
console.log('The client has disconnected!');
// 通过Socket发送一条消息到服务器
function sendMessageToServer(message) {
socket.send(message);
Socket.IO简化了WebSocket API,统一了返回运输的API。传输包括:WebSocketFlash SocketAJAX long-pollingAJAX multipart streamingIFrameJSONP polling你还可以设置任意的Socket.IO构造器的第二个选项,选项包括:port - 待连接的端口transports - 一个数组,包含不同的传输类型transportOptions - 传输的参数使用的对象,带附加属性Socket.IO还提供了由本地WebSocket API提供的普通连接、断开连接、消息事件。Socket还提供了封装每个事件类型的方法。
客户端使用socket.io
去github clone socket.io的最新版本,或者直接饮用使用socket.io的CDN服务:
&script src="http://cdn.socket.io/stable/socket.io.js"&&/script&
下面可以创建使用socket.io库来创建客户端js代码了:
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
socket.on是监听,收到服务器端发来的news的内容,则运行function,其中data就是请求回来的数据,socket.emit是发送消息给服务器端的方法。
socket.io不仅可以搭建客户端的websocket服务,而且支持nodejs服务器端的websocket。
使用node插件管理包,运行下面的命令就可以安装成功socket.io
npm install socket.io
关于如何配置npm见前一篇文章
通过nodejs的http模块就可以方便的搭建websocket服务器环境,例如下面的代码:
server端:
http = require('http')
, socketio = require('socket.io');
var server = http.createServer(function(req, res) {
res.writeHead(200, { 'Content-type': 'text/html'});
console.log('Listening at: http://localhost:8080');
//添加一个连接监听器
socketio.listen(server).on('connection', function (client) {
//监听成功
client.on('message', function (msg) {
console.log('Message Received: ', msg);
client.send('message', msg);
client.on("disconnect", function() {
console.log("Server has disconnected");
client端:
&script src="/ajax/libs/jquery/1.7.2/jquery.min.js"&&/script&
&script src="/socket.io/socket.io.js"&&/script&
Incoming Chat:&&ul id="incomingChatMessages"&&/ul&
&input type="text" id="outgoingChatMessage"&
$(function(){
var iosocket = io.connect();
iosocket.on('connect', function () {
$('#incomingChatMessages').append($('&li&Connected&/li&'));
iosocket.on('message', function(message) {
$('#incomingChatMessages').append($('&li&&/li&').text(message));
iosocket.on('disconnect', function() {
$('#incomingChatMessages').append('&li&Disconnected&/li&');
$('#outgoingChatMessage').keypress(function(event) {
if(event.which == 13) {
event.preventDefault();
iosocket.send($('#outgoingChatMessage').val());
$('#incomingChatMessages').append($('&li&&/li&').text($('#outgoingChatMessage').val()));
$('#outgoingChatMessage').val('');
把服务端代码保存为socket.js然后在命令行执行:node socket.js&即可启动服务器,用浏览器打开两个页面就可以测试了。注:代码要和npm_module在同一个目录下。不然会出现找不到socket.io module的错误。WebSocket 的性能与压力测试 - 推酷
WebSocket 的性能与压力测试
相对于短连接应用,长连接应用的测试要麻烦得多——尤其是性能和压力测试。此前,甚至从来没有给任何一个上线的 WebSocket 应用做过这方面的测试,前两天,看到有人在
这方面的问题,刚好又有空,于是想着,还是来查查这方面的资料吧。在 Github 上一搜,还真有现成的工具,名字很简单,直接就叫
websocket-bench 是个用 Node.js 编写的命令行工具,可以对使用 Socket.io、
编写的长连接应用进行性能和压力测试,用法和参数与 ab 差不多,多了一个指定连接成功后进行的操作的定义。
websocket-bench 安装
需要使用 npm 以全局的方式来安装 websocket-bench,当然要用阿里提供的
npm install -g websocket-bench --registry=http://registry.npm.taobao.org
这里以在 CentOS 6.5 上进行测试为便进行说明。首先要修改一下文件打开数,默认是1024,修改为一个比较大的值就行,总共65535个端口,我们测试也不会用太大的并发,websocket-bench 推荐设置的是 60000 ,命令如下:
ulimit -n 60000
websocket-bench 的参数与 ab 基本一致,像这样
websocket-bench -a 300 -c 29 http://localhost:8100 -o opt.log
参数用于指定总共的测试次数,
参数指定并发连接数。我这里测试的是一个 Socket.io 的服务器,所以不需要使用
参数指定类型,如果是其它的,则需要使用
进行指定。运行完成后,会打印报告,报告分两小部分,前一部分是以
指定的数量组织的表格,后一部分是整个测试的统计,数据包括错误数和消耗时间。
参数可以将报告保存到单独的文件中。
使用 generator 来自定义测试逻辑
长连接压力测试麻烦的一部分,就在于连接完成后需要完成一定的交互操作,websocket-bench 通过
文件来方便测试人员编写连接上服务器后所需要执行的操作。下面是我为了简单的测试一个2D地图移动游戏的简单测试文件:
module.exports = {
//可选,在建立连接之前会执行
beforeConnect: function(client){
//必选,建立连接后所要做的事情
onConnect: function(client, done){
//向服务器发送消息
//client 为客户端的连接实例
client.emit('setTitle', {title: 'bench_' + randomNumber(), pVer: 2});
//回调函数
//必选,向服务器民送消息时运行的代码
sendMessage: function(client, done) {
client.emit('moveTo', {x: randomNumber(3500), y: randomNumber(3500)});
}};function randomNumber(max){
return Math.floor(Math.random()* (max || 100000));}
编写完成后,在运行 websocket-bench 时,使用
参数指定 generator 文件即可。
另外,测试的时候,可以使用
工具来看看带宽的占用情况。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 信管家平台手续费多少 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信