`

WebSocket使用示例

阅读更多
Html5给大家提供了一个很高大上的功能:WebSocket socket通信是在服务端与客户端之间进行的,所谓的WebSocket其实就是通过Html 与 后台服务器之间进行的消息传递;

下面我们来介绍一下如何实现一个简单的WebSocket实例。

注意:
JDK必须是1.7以上版本,tomcat必须是7以上版本;
spring对Websocket的支持也是只有Spring4之后才有

1、编写客户端程序

<div class="row-fluid">
	<label>我要咨询
	</label>
	<label id="toUserName"></label>
	<div class="span12">
	<textarea rows="4" id="question_text" class="form-control"></textarea>
	</div>
</div>
<div class="row-fluid" style="margin-top: 10px;">
	<button id="btn_send" class="btn btn-default">发送</button>
	<button id="btn_cancel" class="btn btn-default">取消</button>
</div>
<hr>
<div class="row-fluid">
	<div class="span12" id="discussList">
	</div>
</div>



js代码



var webSocket =new WebSocket(resourceDomain.replace("http://", "ws://") + 'coder_request?wx101id='+wx101id);
 
webSocket.onerror = function(event) {
onError(event)
};

webSocket.onopen = function(event) {
onOpen(event)
};

webSocket.onmessage = function(event) {
onMessage(event)
};
function onMessage(event) {
	var json =JSON.parse(event.data);
	var div = '<div class="thumbnail">';
	if (json.creator) {
		div = div +'<label>' + json.creator +'</label>';
	}
	div = div + '<div>' + json.content+ '</div>';
	div = div + '</div>';
	$("#discussList").prepend(div);
}

function onOpen(event) {
	userWebsocket = true;
}

function onError(event) {
  	alert(event.data);
}




2、编写服务端程序
package com.itbuilder.wx.web.socket;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;

import com.itbuilder.framework.ApplicationContextHolder;
import com.itbuilder.framework.util.AssertUtil;
import com.itbuilder.framework.util.JSONUtil;
import com.itbuilder.wx.entity.Wxjc101;
import com.itbuilder.wx.entity.Wxjc102;
import com.itbuilder.wx.service.IWxjc102Service;
import com.itbuilder.wx.web.WebChatPool;


/**
 * 开发人员咨询socket
 * @author mrh
 *
 */
@Controller
@ServerEndpoint("/coder_request")
public class CoderRequestSocket {
	
	private IWxjc102Service wx102Service;
	
	/**
	 * LOGGER
	 */
	private static final Logger LOGGER = Logger.getLogger(CoderRequestSocket.class);
	
	

	public CoderRequestSocket() {
		this.wx102Service = ApplicationContextHolder.getBean("wx102Service", IWxjc102Service.class);
	}

	/**
	 * 接收到开发人员发送的消息
	 * @param message
	 * @param session
	 * @throws IOException
	 * @throws InterruptedException
	 */
	@OnMessage
	public void onMessage(String content, Session session) {
	    try {
	    	String toUserName = this.getToUserName(content);
	    	String message = this.getMessage(content);
	    	String wx101id = this.getPoolId(session);
	    	Wxjc102 wx102 = this.wx102Service.doSendMsg(message, toUserName, wx101id);
	    	Wxjc101 wx101 = this.wx102Service.queryWx101(wx101id);
	    	Session reciver = WebChatPool.getSession(wx101id, wx101.getModifier());
			session.getBasicRemote().sendText(JSONUtil.toString(wx102));
			if (AssertUtil.hasValue(reciver) && !reciver.getId().equals(session.getId())) {
				reciver.getBasicRemote().sendText(JSONUtil.toString(wx102));
			}
			reciver = WebChatPool.getSession(wx101id, toUserName);
			if (AssertUtil.hasValue(toUserName) && !reciver.getId().equals(session.getId())) {
				reciver.getBasicRemote().sendText(JSONUtil.toString(wx102));
			}
		} catch (IOException e) {
			LOGGER.error("接受消息失败 sessionId = " + session.getId(), e);
		} catch (Exception e) {
			LOGGER.error("接受消息失败 sessionId = " + session.getId(), e);
		}
	}
	
	/**
	 * 获取发送人信息
	 * @param content String
	 * @return String
	 */
	private String getMessage(String content) {
		if (!AssertUtil.hasValue(content)) {
			return null;
		}
		if (!content.contains("&")) {
			return content;
		}
		return content.substring(0, content.lastIndexOf("&"));
	}
	
	/**
	 * 获取发送人信息
	 * @param content String
	 * @return String
	 */
	private String getToUserName(String content) {
		if (!AssertUtil.hasValue(content)) {
			return null;
		}
		if (!content.contains("&")) {
			return null;
		}
		return content.substring(content.lastIndexOf("&")+1, content.length());
	}
	
	/**
	 * 链接打开之后将开发人员添加到回话池中
	 * @param session
	 */
	@OnOpen
	public void onOpen(Session session) {
		String poolId = this.getPoolId(session);
		if (AssertUtil.hasValue(poolId)) {
			WebChatPool.add(poolId, session.getId(), session);
		}
	}
	 
	@OnClose
	public void onClose(Session session) {
		String poolId = this.getPoolId(session);
		if (AssertUtil.hasValue(poolId)) {
			WebChatPool.remvoe(poolId, session.getId());
		}
	}
	
	
	/**
	 * 当前会话池ID
	 * @param session
	 * @return
	 */
	private String getPoolId(Session session) {
		Map<String, List<String>> paramMap = session.getRequestParameterMap();
		if (AssertUtil.hasValue(paramMap)) {
			List<String> wx101IdList = paramMap.get("wx101id");
			if (AssertUtil.hasValue(wx101IdList)) {
				return wx101IdList.get(0);
			}
		}
		return null;
	}
}




分享到:
评论

相关推荐

    ubuntu lighttpd实现websocket

    1、下载mongoose使用mongoose中的example中的websocket_chat,实现websocket 2、websocket_chat源码下载路径 官网:https://cesanta.com 论坛:https://forum.mongoose-os.com/index.php?p=/categories/mongoose ...

    C#WebSocket示例(初学者必备)

    在上述示例中,`websocketclient.html`可能是用于展示如何在网页端使用JavaScript与C# WebSocket服务器交互的代码。通常,HTML页面会使用WebSocket API(`WebSocket`对象)来创建与服务器的连接,并处理收发数据。 ...

    qt websocket 客户端代码 简单的websocket的示例代码

    在Qt框架下,我们可以使用Qt网络模块中的QWebSocket类来实现WebSocket客户端。下面我们将深入探讨如何在Qt中编写WebSocket客户端代码。 首先,理解Qt中的QWebSocket类是关键。QWebSocket是Qt提供的一个网络类,用于...

    go-websocket-examples:Go语言WebSocket使用例子

    本项目"Go语言WebSocket使用例子"提供了一系列示例,帮助开发者理解和实践Go中的WebSocket编程。 在Go中,WebSocket的实现主要依赖于`gorilla/websocket`库,这是一个非常流行的WebSocket库,提供了易于使用的API。...

    .net websocket简单示例

    这个例子展示了如何在.NET控制台程序中创建WebSocket服务器,并在网页客户端使用WebSocket API进行连接和通信。需要注意的是,实际项目中可能需要处理更多细节,如异常处理、心跳机制、连接管理等。另外,提供的示例...

    .NET Core WebSocket示例

    综上所述,".NET Core WebSocket示例"项目是一个实用的学习资源,涵盖了从启用WebSocket服务到实现客户端和服务器间通信的全部流程,对于理解WebSocket在ASP.NET Core中的应用非常有帮助。通过深入学习和实践,...

    Java版websocket示例

    WebSocket是网络通信协议的一种,它在...通过这个示例,你可以学习到如何在Java中实现WebSocket服务器端点,以及如何在客户端使用WebSocket进行通信。这为开发实时Web应用,如聊天应用、游戏或股票报价等提供了基础。

    C# WebSocket使用实例源码,包含服务端和客户端

    通过研究和运行这个示例,开发者可以更好地理解和掌握WebSocket在实际项目中的应用,特别是在需要实时数据交互的场景下,如在线聊天、游戏、股票交易等。同时,它也展示了如何处理不同类型的数据,以及在不同环境...

    spring-boot-websocket-client代码示例

    在本文中,我们将深入探讨如何使用Spring Boot构建一个WebSocket客户端。`spring-boot-websocket-client`这个项目就是一个关于此主题的代码示例。Spring Boot作为Java生态中的一个热门框架,简化了创建独立、生产...

    websocket小例子

    在WebSocketDemo1这个文件中,很可能包含了一个简单的WebSocket客户端和服务器的示例代码。客户端可能是一个HTML页面,使用JavaScript创建WebSocket实例并处理事件;服务器端可能是用Node.js、Python的Flask-...

    websocket例子

    WebSocket简单例子(包含一个WebSocket例子、一个SockJS例子、一个STOMP例子) 一个WebSocket例子:基于HTML5 一个SockJS例子:SockJS是对WebSocket做了封装,因为有些环境可能不支持WebSocket,SockJS会智能选择...

    weblogic websocket示例代码

    综上所述,这个"weblogic websocket示例代码"提供了一个在WebLogic中实现WebSocket通信的完整示例,包括服务器端点、客户端连接以及消息处理。通过学习和实践这个示例,开发者可以更好地理解如何在企业级环境中利用...

    基于tomcat的websocket开发示例源码

    在JavaScript中,我们可以使用`WebSocket`对象来创建到服务器的WebSocket连接。以下是一个简单的示例: ```html &lt;!DOCTYPE html&gt; &lt;title&gt;WebSocket Test &lt;h1&gt;WebSocket Test var socket = new WebSocket(...

    WebSocket教程

    在实际应用中,你可以使用各种编程语言和框架来实现WebSocket服务。例如,对于Node.js,可以使用`ws`库;在Python中,可以选择`Flask-SocketIO`或`Sanic-WebSocket`。这些库提供了创建WebSocket服务器、监听连接、...

    html5的websocket代码示例包括错误解决方案

    WebSocket是HTML5的一项重要技术,它为Web应用提供了全双工、低延迟的通信方式,使得服务器能够...通过学习这些示例,你可以更好地掌握WebSocket的使用,并能有效地解决可能出现的问题,从而构建出高效的实时Web应用。

    netty实现websocket例子

    在"Netty实现WebSocket例子"中,我们将探讨如何使用Netty来搭建WebSocket服务器,并实现客户端与服务器之间的双向通信。首先,我们需要理解WebSocket的基本概念和工作原理。WebSocket协议是基于TCP的,它通过HTTP的...

    Unity3D插件BestHttp,用于做websocket使用

    2. **配置WebSocket连接**:在Unity脚本中,使用BestHttp提供的WebSocket类来创建和管理连接。你需要指定WebSocket服务器的URL,并设置相应的连接参数。 3. **建立连接**:调用WebSocket的Open方法来建立与服务器的...

    Android-WebSocket通讯例子

    这个"Android-WebSocket通讯例子"的DEMO应该包含了上述基本步骤的实现,对于初学者来说,这是一个很好的起点。通过分析和运行DEMO,你可以更深入地理解WebSocket在Android中的工作原理和应用方法。同时,别忘了测试...

    websocket的java示例

    1. **服务器端点**:在服务器端,我们可以使用`@ServerEndpoint`注解定义一个类,该类将作为WebSocket的端点。例如: ```java import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax....

    websocket简单示例web项目,直接部署可使用

    这个"websocket简单示例web项目"是一个非Maven的Eclipse项目,提供了直接部署和使用的功能,适用于快速理解和学习WebSocket技术。 1. WebSocket基础: WebSocket协议基于TCP,它在HTTP握手后转换到一个专门的...

Global site tag (gtag.js) - Google Analytics