论坛首页 Java企业应用论坛

利用websocket快速实现多人聊天功能

浏览 11304 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-09-02   最后修改:2013-09-02

 

J2EE7已经发布了 参照 http://www.iteye.com/news/27980

j2ee7支持websocket协议,eclipse4.3 netbeans 7.3.1 这些ide 都已经开始支持.

但文档相对较少,下面利用netbeans 快速搭建一个多人聊天的功能

https://netbeans.org/downloads/ 迅速下载一个

选择ALL的安装包  224M 下载完后快速安装。

新建一个j2ee项目



 

web页添加chat.hml  建立和websocket 连接

<div id="messages"></div>

         <script type="text/javascript">

                   var webSocket =

                            new WebSocket('ws://localhost:8080/EnterpriseApplication1-war/chat');

 

                   webSocket.onerror = function(event) {

                            onError(event)

                   };

 

                   webSocket.onopen = function(event) {

                            onOpen(event)

                   };

 

                   webSocket.onmessage = function(event) {

                            onMessage(event)

                   };

 

                   function onMessage(event) {

                            document.getElementById('messages').innerHTML += '<br />' + event.data;

                   }

 

                   function onOpen(event) {

                            document.getElementById('messages').innerHTML = '已连接到服务器......<br/>';

                   }

 

                   function onError(event) {

                            alert(event.data);

                   }

 

                   function start() {

                            webSocket.send('hello');

                            return false;

                   }

               

                function send(){

                      var talk = $('talk');

                     var nike = $('nike');

                     webSocket.send('<strong style="color:red">'+nike.value+':</strong>'+talk.value);

                }

               

                function $(id){

                    return document.getElementById(id);

                }

 

         </script>

 

 

 

服务端代码

 

@ServerEndpoint("/chat")

public class WebSocketTest {

 

@OnMessage

public void onMessage(String message, Session session)

    throws IOException, InterruptedException {

    // Print the client message for testing purposes

   

    System.out.println("Received: " + message);

   

  

         //获取所有存活会话,并相应消息

    Set<Session> set=session.getOpenSessions();

    Iterator<Session> it=set.iterator();

//迭代遍历  

 while(it.hasNext()){

        Session everySession=it.next();

        if(everySession.isOpen()){

            everySession.getBasicRemote().sendText(message);

        }

    }

 

在项目上点击运行,运行netbeans自带的glassfish 4

多开继续页面 访问路径http://localhost:8080/EnterpriseApplication1-war/chat.html

可以看到如下效果

 

<!--[if gte vml 1]><v:shape id="图片_x0020_14" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:405.75pt; height:491.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ASUS\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

 

 



 

 

 

附源码:

  • 大小: 69 KB
  • 大小: 16.6 KB
  • 大小: 5.3 KB
   发表时间:2013-09-02  
之前搞了一下PHP websocket一直连接不上。
后来就没再搞了。
0 请登录后投票
   发表时间:2013-09-06  
提供的源码可以使用。但是,我放到现有的工程里就不能访问。是不是与Spring3有冲突?服务端代码,只要@ServerEndpoint("/chat")这个标记就可以了吗?要不要在Web.xml里做什么配置。
0 请登录后投票
   发表时间:2013-09-06  
web.xml 不需要加配置,

引用一下注解的描述
ServerEndpoint (Java(TM) EE 7 Specification APIs)
Annotation Type ServerEndpoint

@Retention(value=RUNTIME)
@Target(value=TYPE)
public @interface ServerEndpoint
This class level annotation declares that the class it decorates is a web socket endpoint that will be deployed and made available in the URI-space of a web socket server. The annotation allows the developer to define the URL (or URI template) which this endpoint will be published, and other important properties of the endpoint to the websocket runtime, such as the encoders it uses to send messages.
The annotated class must have a public no-arg constructor.

BTW,我一会试下是否和spring3有冲突

janrn 写道
提供的源码可以使用。但是,我放到现有的工程里就不能访问。是不是与Spring3有冲突?服务端代码,只要@ServerEndpoint("/chat")这个标记就可以了吗?要不要在Web.xml里做什么配置。
0 请登录后投票
   发表时间:2013-09-06  

我新建了一个项目

加入servlet Spring mvc和Spring ioc 都可以跑

 见附件

0 请登录后投票
   发表时间:2013-09-07  
websokect有没有性能问题?
比如最大连接数是多少?
0 请登录后投票
   发表时间:2013-09-12  
fsfish 写道

我新建了一个项目

加入servlet Spring mvc和Spring ioc 都可以跑

 见附件

 

多谢,已经可以了,原来是类库冲突,我在开发过程中引入了javax.websocket-api,发布时没去掉。现在已经可以运行了。

不过,发现刷新页面时,经常连接不上WebSocket。控制台打出的信息经常是Cliention closed,差不多都是两次成功,然后两次失败,然后又两次成功,又两次失败,如此循环。

我的环境是JDK7,Tomcat8

0 请登录后投票
   发表时间:2013-11-20  
能得到客户端的IP,浏览器等信息不?能得到用户的session吗?这里的session和tomcat中的完全不一样呢
0 请登录后投票
   发表时间:2013-11-29  
楼主能不能说说,node.js 和这个的优缺点啊。其实还是比较喜欢java的,写起感觉舒服一些。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics