# aardio 范例: WSS 服务端



```aardio
//WSS 服务端
import win.ui;
/*DSG{{*/
var winform = win.form(text="wss 服务端";right=759;bottom=469)
winform.add(
edit={cls="edit";left=12;top=13;right=744;bottom=448;edge=1;multiline=1;z=1}
)
/*}}*/

import console; 
import web.SocketSharp;//打开控制台可查看服务端错误输出
 
//加载 SSL 证书后可改为 wss:// 。
var wssv = web.SocketSharp.Server.WebSocketServer("wss://localhost:8877") 
 
//生成测试证书，ws 协议不需要
import web.SocketSharp.Pfx;
wssv.SslConfiguration.ServerCertificate = System.Security.Cryptography.X509Certificates.X509Certificate2(
	web.SocketSharp.Pfx("/test.pfx","123456") 
);
 
/*
第二个参数用于定义一个 WebSocket 会话类。
每次创建新的 WebSocket 连接时会调用类创建WebSocket 会话实例。 
*/
wssv.AddWebSocketService("/echo",class {
	 
	onMessage = function(e){
		/*
		this.socket 会自动绑定为 WebSocketSharp.Server.WebSocketBehavior 实例。
		用法请参考 WebSocketSharp 文档。
		
		必须定义 this.onMessage 事件用于接收消息。
		可选定义 this.onOpen, this.onClose, this.onError 事件。
		这几个事件与 WebSocketSharp.Server.WebSocketBehavio 的同名事件用法相同。
		唯一不同的是首字母小写。
		
		this.send() 等价于调用 this.socket.Send()
		this.sendAsync() 等价于调用 this.socket.SendAsync()
		唯一区别是首字母小写。
		*/ 
		
		winform.edit.print("服务端收到消息",e.data)
		 
		//同步发送，群发用 this.broadcast
 		this.send("你好我是服务端")
 		
 		//异步发送，成功回调参数 @2，异步群发用 broadcastAsync
 		this.sendAsync("你好我是服务端",function(completed){
 			
 		} ) 
	}  
});

//启动服务器
wssv.Start();

winform.onDestroy = function(){ 
    wssv.Stop();//关闭服务器，不然下次启动，短时间内端口会是占用状态
}

winform.show();
win.loopMessage();
```

