基于html5 WebSocket和WebRTC实现IM和视音频呼叫(二)

在上篇文( 基于html5 WebSocket和WebRTC实现IM和视音频呼叫(一))里我们已经用Jetty-7.5.4.v20111024搭起了一个WebSocket server,现在就可以编写自己的WebSocket Server逻辑完成自己的实现了。

一、编写WebSocket服务端逻辑

MyWebSocketServlet类继承自Jetty开发包中的org.eclipse.jetty.websocket.WebSocketServlet类,用于实现我们的WebSocket 服务端入口。前期没有编写太多的服务端逻辑,只是实现了接受并记录所有连接client端,并广播所有client端消息的功能,代码如下:

MyWebSocketServlet.java

 

TailorSocket 继承自 WebSocket.OnTextMessage,每当一个client连接时就会调用doWebSocketConnect方法实例化一个client对象。

server端通过TailorSocket的_connection.sendMessage(data)方法向client发送文本消息;通过onMessage接收client发送的文本消息,并调用broadcastMessage方法向所有连接的client广播消息。

 

二、编写Client逻辑

WebSocket对象在不同的浏览器实现稍有区别,为了代码适应更多的浏览器在调用WebSocket对象前需要判断当前的浏览器,然后实现WebSocket的onopen,onmessage,onclose等方法,即可与WebSocket服务端建立连接,具体代码如下:

var server = {

	connect : function() {

		var location = get_appropriate_ws_url() + "/servlet/a";

		if (BrowserDetect.browser == "Firefox") {

			this._ws = new MozWebSocket(location, null);

		} else {

			this._ws = new WebSocket(location, null);

		}

		this._ws.onopen = this._onopen;

		this._ws.onmessage = this._onmessage;

		this._ws.onclose = this._onclose;

		showLog("connecting...");

	},



	_onopen : function() {

		showLog("connected to server!");

	},



	_send : function(message) {

		if (this._ws)

			this._ws.send(message);

	},



	send : function(text) {

		if (text != null && text.length > 0) {

			server._send(text);

		}

	},



	_onmessage : function(m) {

		if (m.data) {

			showMessage("others", m.data);

		}

		showLog("onmessage");

	},



	_onclose : function(m) {

		this._ws = null;

		showLog("onclose");

	}

};

下面的test.html和test.js简单实现了群聊聊天室:

test.html
test.js

test2.html则用html5的canvas实现了电子白板的功能:

test2.html

 
相关资料:

http://git.warmcat.com/cgi-bin/cgit/libwebsockets/

http://dev.w3.org/html5/websockets/

你可能感兴趣的:(websocket)