socket测试网站(nodejs socket 怎么检测客户端主动断开连接)

本文目录
- nodejs socket 怎么检测客户端主动断开连接
- XMLSocket 通讯如何测试
- 怎样简单检测socket的健康状态
- linux 下的socket怎么测试是否成功
- 如何检测nodejs的socket
- 如何在jmeter里进行socket通讯测试
nodejs socket 怎么检测客户端主动断开连接
***隐藏网址***
所以有两种思路,一个是自己在在Scoket.io的业务层设置定时器,超过一段时间无业务数据,释放socket.io的资源。另一种就是把TCP连接超时时间设短,不过要注意socket.io的socket不是node.js的socket,可以参考以下代码:
io.sockets.on(‘connection’, function (socket) {
socket.manager.transports.socket.setTimeout(15000);
//…
}
如果client关闭后,大约15+15秒之后会释放资源。
XMLSocket 通讯如何测试
XMLSocket主要用于与服务端进行即时通信,目前的应用领域主要是Flash文本聊天和Flash在线游戏等方面。
XMLSocket的优点:
1、能和服务端即时通信;
2、Flash Player 5.0以上的版本内置类,不需另装组件或插件;
3、因为XMLSocket就是相当于一个Socket客户端,所以一般的中间件都支持的(如java,.Net等)
XMLSocket的缺点:
1、XMLSocket只能传字符串或xml格式的文本,数据类型单一;
2、XMLSocket服务端自行开发的话,需要对Socket技术比较了解才行,好在网上有现成的服务端软件(商业的XMLSocket Server 有Unity、Fortress;开源的XMLSocket Server 有Oregano Multiuser Server);
3、还有就是XMLSocket的80端口与flash安全策略问题。(网上有一个解决方法,不知是否可行,请自行验证)
//=======================================;
// Flash客户端(以Flash文本聊天为例);
//=======================================;
var paramObj:Object = new Object();
//命令分隔符;
paramObj.CommandDelimiters = "-@@##@@-";
//用户列表分隔符;
paramObj.PeopleDelimiters = "-@#@-";
//建立XMLSocket对象;
var socket:XMLSocket = new XMLSocket();
//连接状态事件;
socket.onConnect = function(success) {
trace("socket.onConnect:"+success);
if (!success) {
trace("服务器连接失败,请检查网络状态!");
}
};
//关闭事件;
socket.onClose = function() {
trace("服务端已关闭!");
logoutChat();
};
//数据通信事件;
socket.onData = function(src) {
//trace("socket.onData:"+src);
doCommand(getCmdArrayByMsg(trim(src)));
};
//用户登录;
function loginChat():Void {
//连接Socket服务端;
socket.connect(“localhost”, “8888”);
sendSocket("INFO"+paramObj.CommandDelimiters+msg);
}
//用户注销;
function logoutChat(b:Boolean):Void {
sendSocket("QUIT");
}
//显示聊天信息;
function showChat(msg:String):Void {
trace(“聊天信息:”+msg);
}
//发送聊天信息;
function sendChat(msg:String):Void{
sendSocket("MSG"+paramObj.CommandDelimiters+msg+paramObj.CommandDelimiters+msg);
}
//向服务端发送信息;
function sendSocket(msg:String):Void {
socket.send(msg+"\r");
}
//处理服务端返回信息;
function getCmdArrayByMsg(msg:String):Array {
if (msg.charCodeAt(0) == 13 && msg.charCodeAt(1) == 10) {
msg = msg.substr(2);
}
return msg.split(paramObj.CommandDelimiters);
}
function doCommand(arr:Array):Void {
switch (arr) {
case "MSG" :
showChat(arr);
break;
case "TAKEN" :
trace("你的登录名已经有了,请重新换一个登录名!");
break;
case "PEOPLE" :
doPeople(arr);
break;
}
}
//显示在线用户列表;
function doPeople(msg:String):Void {
var people_arr:Array = msg.split(paramObj.PeopleDelimiters);
trace(people_arr);
}
怎样简单检测socket的健康状态
开发程序经常用到socket,新手熟手一般都会用select、recv和send这样几个函数,而且大多数情况下,会用这几个函数也就差不多了。更深入的开发会发现,现成的socket函数并没有提供检测socket是否健康的函数,通常的资料也并没有现成的方法可用。本文提供了一个方案,在windows和linux下初步测试,效果良好。 必须先声明的是socket通信是双工的(如果读者对此不了解,可先查一下相关资料)。因此socket的健康状态是分两个方向的,一个是你发送(send)的方向,一个是你接收(recv)方向的。只有两个方向都是关闭的,这个socket才是真正关闭的,也只有这两个方向都是健康的,此socket才是真正健康的。真正难以检测的,其实就是这种半健康状态的socket。当然我们也可以认为,如果我们两个方向的状态都可以检测清楚,那么此socket的健康状态我们自然就清楚了。 好了,先认识一下上面提到的三个函数返回值的含义。函数名返回值select0 :超时-1 :socket出错》0 :有数据已到达send0 :发送缓冲区已满-1 :socket出错》0 :本次已发送到缓冲区的字节数recv0 :对方已主动关闭了此socket-1 :socket出错》0 :本次已成功接收的字节数 应该说,你发送(send)方向的健康是由你来控制的,只要你不主动调用close或closesocket,它就是健康的。如果你关闭了这个方向的socket,原则上你一定能记得住,如果实在记不住,getsockname/ getpeername可以帮你检测其状态,它们会返回此socket在本机的IP地址和端口号,如果它们返回-1,那就是你已经主动关闭了这个socket的发送(send)方向。 麻烦在另一端主动关闭了他的发送(send)方向,而这在你看来是你的接收(recv)方向被关闭了。另一端的这个关闭动作理论上是可以随时发生的,不需要事前通知,也没法事后通知,因此只能由你这一方想办法检测。 简单地说,当你的接收(recv)方被关闭后,你的select会返回》0的值(这说明对方有数据发送过来),你的recv会返回0(这说明对方已经主动关闭了你的接收recv方向)。这两个值联合起来,说明对方在主动断开后,确实向你这一方发送了数据,但不幸的是,你一接却是个0字节大小。有关socket的几种状态的资料,网上很多,大家可以自己去查。 上面的方法在通常的实践中就可以使用了,但如果你就想检测socket的接收(recv)方向的状态,就还需要另一个技巧。recv一般是会从缓冲区中拿走数据的,所以当你只想检测状态而又不想拿走数据时,得学会使用recv的第四个参数的用法。通常情况下它是0,但当它为MSG_PEEK时,它的意思是偷看,即看一下缓冲区前面的若干字节,但并不从缓冲区中拿走。在本方案中,只要偷看1个字节就好了,如果返回0,就说明对方已经主动发起关闭了。 我们来总结一下简单地检测socket健康状态的全过程。
1、用getsockname/ getpeername来检测你的发送(send)方向的状态,如果你不知道你是否主动关闭了这个方向;
2、用select和recv(,,1,MSG_PEEK)来共同检测你的接收(recv)方向的状态。 特别说明的是,socket的状态其实分好几种。
linux 下的socket怎么测试是否成功
增加对Linux socket连接 最近的一个项目的最大连接数是模拟多个套接字的客户端和服务器之间的通信。 Linux系统由于Linux的限制,/在include / linux / posix_types.h文件中有如下的宏定义: #UNDEF __FD_SETSIZE 的#define __FD_SETSIZE 1024 这个宏是当你需要超过1024个FD,如select()函数将监听错误定义的最大文件描述符1024。所以,你需要改变1024所需要的数量,但不超过65,535。但这是不够的仅仅。 第二步你需要的文件的进程打开的最大数量。具体的步骤是: 1,CD /usr/src/linux-2.4/include/linux 2,六limits.h中文件: 的#define NR_OPEN 90240原1024 1024 的#define OPEN_MAX 10240原值 3值,六fs.h文件 的#define INR_OPEN 10240原值1024 的#define NR_FILE 65536 8192原始值,内存64 / 1M比例计算的值,1G内存的计算公式为:64 * 10. 4 1024 的#define NR_RESERVED_FILES 128原值,CD /usr/src/linux-2.4/include/net BR》五,六tcp.h中 的#define TCP_LHTABLE_SIZE的32 128原值易听听队列,建立大。 - 设为与内存相关的打开文件的最大数量,系统会减慢太多。 第三步是编译内核,具体步骤是: 1.使清洁 2.化妆 3. make dep的 4.做的bzImage 将导入的bzImage /启动重新启动系统! wc命令,以目前在建立套接字连接数统计| 与超过1024个客户端和服务器到服务器的终端使用netstat的连接。
如何检测nodejs的socket
用Socket实现的一个端口测试程序
var net = require(’net’),socket = net.Socket;/*
测试端口
*/
var testPort = function(port,host,cb){var nsk = new socket();
nsk.setTimeout(5000);//设置连接超时时间 5s
nsk.on(’connect’,function(){//连接状态
nsk.destroy();//销毁
cb(port,’open’);
})
.on(’timeout’,function(){//连接超时
nsk.destroy();
cb(port,’timeout’);
})
.on(’error’,function(){//连接错误
nsk.destroy();
cb(port,’closed’);
});
nsk.connect(port,host);//执行连接
};
如何在jmeter里进行socket通讯测试
您好,1. 在Eclipse中编写调用socket通讯的Jmeter脚本
新建测试项目
编写测试脚本
引入JMeter的jar包,从Jmeter的安装目录lib\ext中拷贝两个文件
ApacheJMeter_core.jar
ApacheJMeter_java.jar
写测试类,继承AbstractJavaSamplerClient类
/**********************************************
* @author Simon.Hoo(simon.hoo.it@gmail.com)
* @contact MSN: simon_hoo@msn.com
* @Create July 8, 2011
********************************************/
packagecom.cottsoft.socket.test;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.io.IOException;
importorg.apache.jmeter.config.Arguments;
importorg.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
importorg.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
importorg.apache.jmeter.samplers.SampleResult;
publicclassTestSocketextendsAbstractJavaSamplerClient{
privateStringserverIp;
privateintserverPort;
privateStringfile;
@Override
publicSampleResult runTest(JavaSamplerContext sc){
serverIp=sc.getParameter(“serverIp”);
serverPort=Integer.valueOf(sc.getParameter(“serverPort”));
file=sc.getParameter(“file”);
Stringmessage=readFileByLines(file);
SampleResult sr=newSampleResult();
sr.setSampleLabel(“Socket Test”);
try{
SocketClientc=newSocketClient();
c.callServer(serverIp,serverPort,message);
}catch(Exceptione){
e.printStackTrace();
sr.setSuccessful(false);
}finally{
sr.sampleEnd();
}
returnsr;
}
@Override
publicArguments getDefaultParameters(){
Arguments params=newArguments();
params.addArgument(“serverIp”,“10.13.0.88″);
params.addArgument(“serverPort”,“7001″);
params.addArgument(“file”,“F:/test.txt”);
returnparams;
}
@Override
publicvoidsetupTest(JavaSamplerContext context){
super.setupTest(context);
}
@Override
publicvoidteardownTest(JavaSamplerContext context){
super.teardownTest(context);
}
privateStringreadFileByLines(StringfileName){
File file=newFile(fileName);
BufferedReader reader=null;
StringBuffer sb=newStringBuffer();
try{
//System.out.println(“以行为单位读取文件内容,一次读一整行:”);
reader=newBufferedReader(newFileReader(file));
StringtempString=null;
//int line = 1;
// 一次读入一行,直到读入null为文件结束
while((tempString=reader.readLine())!=null){
// 显示行号
sb=sb.append(tempString);
//System.out.println(“line ” + line + “: ” + tempString);
//line++;
}
reader.close();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(reader!=null){
try{
reader.close();
}catch(IOException e1){
}
}
}
returnsb.toString();
}
}
getDefaultParameters方法:主要用于设置传入的参数,
setupTest方法:为初始化方法,用于初始化性能测试时的每个线程,
runTest方法:为性能测试时的线程运行体,
teardownTest方法:为测试结束方法,用于结束性能测试中的每个线程,
2. 把上面的例子打包,然后把生成的Alipay_Test_Posp.jar文件拷贝到Jmeter的安装目录lib\ext下。
3. 编写JMeter的测试计划。

更多文章:
ajax提交form表单数据到servlet(HTML与Servlet的连接)
2025年12月7日 10:30
批量转换ascii(如何把txt 批量从utf8转换为ascii,最好有工具)
2025年11月18日 04:30
postgresql 创建用户(postgresql如何用新创建的用户登录呢)
2026年1月28日 16:30
工程师一个月能赚多少钱(造价工程师一般月收入是多少 需求量大吗)
2026年7月4日 11:00
delphi led扩展屏显示开发(用DELPHI模拟LED屏下的那种文字特效怎么做)
2025年12月17日 14:30
download是什么意思可以删除吗(Download什么意思,Download的文件夹能删了吗,)
2026年7月27日 03:15
trousers后面单复数(The+trousers用不用三单)
2026年5月7日 03:00
linux是自由软件吗(Linux是自由软件,什么是自由软件,它包含哪些含义)
2026年4月14日 08:15
springmvc答辩问题(我的毕业设计是JSP+mysql+Tomcat搭建的一个管理系统,答辩老师问我是怎么设计的,我应该)
2025年11月16日 05:00















