起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 30449|回复: 26

[处理中3] 如何在Bex5部署WebSocket,路径如何写?

[复制链接]

95

主题

312

帖子

1437

积分

金牌会员

Rank: 6Rank: 6

积分
1437
QQ
发表于 2018-2-8 20:56:42 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
在BIZ层写了websocket服务

java代码
  1. package com.erp;

  2. import java.io.IOException;
  3. import java.util.concurrent.CopyOnWriteArraySet;
  4. import javax.websocket.OnClose;
  5. import javax.websocket.OnError;
  6. import javax.websocket.OnMessage;
  7. import javax.websocket.OnOpen;
  8. import javax.websocket.Session;
  9. import javax.websocket.server.ServerEndpoint;

  10. //该注解用来指定一个URI,客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。
  11. @ServerEndpoint("/websocket")
  12. public class MyWebSocket {
  13.          //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
  14.     private static int onlineCount = 0;
  15.      
  16.     //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
  17.     private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<MyWebSocket>();
  18.      
  19.     //与某个客户端的连接会话,需要通过它来给客户端发送数据
  20.     private Session session;
  21.      
  22.     /**
  23.      * 连接建立成功调用的方法
  24.      * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
  25.      */
  26.     @OnOpen
  27.     public void onOpen(Session session){
  28.         this.session = session;
  29.         webSocketSet.add(this);     //加入set中
  30.         addOnlineCount();           //在线数加1
  31.         System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
  32.     }
  33.      
  34.     /**
  35.      * 连接关闭调用的方法
  36.      */
  37.     @OnClose
  38.     public void onClose(){
  39.         webSocketSet.remove(this);  //从set中删除
  40.         subOnlineCount();           //在线数减1   
  41.         System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
  42.     }
  43.      
  44.     /**
  45.      * 收到客户端消息后调用的方法
  46.      * @param message 客户端发送过来的消息
  47.      * @param session 可选的参数
  48.      */
  49.     @OnMessage
  50.     public void onMessage(String message, Session session) {
  51.         System.out.println("来自客户端的消息:" + message);
  52.          
  53.         //群发消息
  54.         for(MyWebSocket item: webSocketSet){            
  55.             try {
  56.                 item.sendMessage(message);
  57.             } catch (IOException e) {
  58.                 e.printStackTrace();
  59.                 continue;
  60.             }
  61.         }
  62.     }
  63.      
  64.     /**
  65.      * 发生错误时调用
  66.      * @param session
  67.      * @param error
  68.      */
  69.     @OnError
  70.     public void onError(Session session, Throwable error){
  71.         System.out.println("发生错误");
  72.         error.printStackTrace();
  73.     }
  74.      
  75.     /**
  76.      * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
  77.      * @param message
  78.      * @throws IOException
  79.      */
  80.     public void sendMessage(String message) throws IOException{
  81.         this.session.getBasicRemote().sendText(message);
  82.         //this.session.getAsyncRemote().sendText(message);
  83.     }

  84.     public static synchronized int getOnlineCount() {
  85.         return onlineCount;
  86.     }

  87.     public static synchronized void addOnlineCount() {
  88.         MyWebSocket.onlineCount++;
  89.     }
  90.      
  91.     public static synchronized void subOnlineCount() {
  92.         MyWebSocket.onlineCount--;
  93.     }
  94. }
复制代码

然后在w文件上写的代码,路径怎么写,现在是404
  1. var websocket = null;
  2.                   //判断当前浏览器是否支持WebSocket
  3.                   if('WebSocket' in window){
  4.                           websocket = new WebSocket("ws://localhost:8080/websocket");
  5.                   }else{
  6.                           alert('Not support websocket');
  7.                   }
  8.          
  9.           //连接发生错误的回调方法
  10.           websocket.onerror = function(){
  11.                   //setMessageInnerHTML("error");
  12.                   alert("error");
  13.           };
  14.          
  15.           //连接成功建立的回调方法
  16.           websocket.onopen = function(event){
  17.                   //setMessageInnerHTML("open");
  18.                   alert("websocket连接成功!");
  19.           }
  20.          
  21.           //接收到消息的回调方法
  22.           websocket.onmessage = function(event){
  23.                   //setMessageInnerHTML(event.data);
  24.                   alert(event.data);
  25.           }
  26.          
  27.           //连接关闭的回调方法
  28.           websocket.onclose = function(){
  29.                   //setMessageInnerHTML("close");
  30.                   alert("close");
  31.           }
  32.          
  33.           //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
  34.           window.onbeforeunload = function(){
  35.                   websocket.close();
  36.           }
  37.          
  38.           //将消息显示在网页上
  39.           function setMessageInnerHTML(innerHTML){
  40.                   document.getElementById('message').innerHTML += innerHTML + '<br/>';
  41.           }
  42.          
  43.           //关闭连接
  44.           function closeWebSocket(){
  45.                   websocket.close();
  46.           }
  47.          
  48.           //发送消息
  49.           function send(){
  50.                   var message = document.getElementById('text').value;
  51.                   websocket.send(message);
  52.           }
复制代码



TIM图片20180208205637.png
TIM图片20180208205547.png
TIM图片20180208205436.png

95

主题

312

帖子

1437

积分

金牌会员

Rank: 6Rank: 6

积分
1437
QQ
 楼主| 发表于 2018-2-8 20:59:21 | 显示全部楼层
这两个路径都不行
ws://localhost:8080/x5/websocket
ws://localhost:8080/websocket
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-2-9 09:44:45 | 显示全部楼层
把文件放到runtime\BusinessServer\WEB-INF下
通过IP:端口/BusinessServer/XX这样访问看看
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

95

主题

312

帖子

1437

积分

金牌会员

Rank: 6Rank: 6

积分
1437
QQ
 楼主| 发表于 2018-2-9 09:55:39 | 显示全部楼层
jishuang 发表于 2018-2-9 09:44
把文件放到runtime\BusinessServer\WEB-INF下
通过IP:端口/BusinessServer/XX这样访问看看 ...

把哪个文件放到那个下面?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-2-9 10:02:10 | 显示全部楼层
自己定义的WebSocket文件
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

95

主题

312

帖子

1437

积分

金牌会员

Rank: 6Rank: 6

积分
1437
QQ
 楼主| 发表于 2018-2-9 10:11:34 | 显示全部楼层
jishuang 发表于 2018-2-9 10:02
自己定义的WebSocket文件

变成200了,但是说不支持请求websocket
地址    ws://localhost:8080/BusinessServer/websocket
TIM图片20180209101026.png
TIM图片20180209101012.png
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-2-9 10:16:11 | 显示全部楼层
在runtime\BusinessServer\WEB-INF\web.xml中配置一下这个java,配置到平台默认的servlet的前面看看
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

95

主题

312

帖子

1437

积分

金牌会员

Rank: 6Rank: 6

积分
1437
QQ
 楼主| 发表于 2018-2-9 10:38:02 | 显示全部楼层
jishuang 发表于 2018-2-9 10:16
在runtime\BusinessServer\WEB-INF\web.xml中配置一下这个java,配置到平台默认的servlet的前面看看 ...
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
  3. <web-app>
  4.   <display-name>Business Server</display-name>
  5.   <description/>
  6.   
  7.   <listener>
  8.     <listener-class>com.justep.x.loader.NativeLoaderListener</listener-class>
  9.   </listener>
  10.   <listener>
  11.     <listener-class>com.justep.x.bs.BusinessSessionListener</listener-class>
  12.   </listener>
  13.   
  14.         <servlet>
  15.         <servlet-name>wsChat</servlet-name>
  16.         <servlet-class>com.erp.MyWebSocket</servlet-class>
  17.     </servlet>
  18.   <servlet>
  19.     <servlet-name>business-server-servlet</servlet-name>
  20.     <servlet-class>com.justep.x.bs.BusinessServerServlet</servlet-class>
  21.     <init-param>
  22.       <param-name>lic-server</param-name>
  23.       <param-value>http://localhost:9426/</param-value>
  24.     </init-param>
  25.     <init-param>
  26.       <param-name>model-list</param-name>
  27.       <param-value>/system/data,/system/ontology,/system/logic/fn,/system/logic/action,/system/logic/code</param-value>
  28.     </init-param>
  29.     <!--model load-->
  30.     <init-param>
  31.       <param-name>build-tree-model-list</param-name>
  32.       <param-value>none</param-value>
  33.     </init-param>
  34.     <init-param>
  35.       <param-name>debug</param-name>
  36.       <param-value>false</param-value>
  37.     </init-param>
  38.     <init-param>
  39.       <param-name>nt-login-ip-list</param-name>
  40.       <param-value>192.168.1.0,192.168.1.1</param-value>
  41.     </init-param>
  42.     <init-param>
  43.       <param-name>nt-login-password</param-name>
  44.       <param-value>123456</param-value>
  45.     </init-param>
  46.     <load-on-startup>1</load-on-startup>
  47.   </servlet>
  48.   <servlet>
  49.     <servlet-name>olapServerInit</servlet-name>
  50.     <servlet-class>com.justep.olap.InitServlet</servlet-class>
  51.     <init-param>
  52.       <param-name>justep</param-name>
  53.       <param-value>/WEB-INF/justep.xml</param-value>
  54.     </init-param>
  55.     <load-on-startup>2</load-on-startup>
  56.   </servlet>
  57.   <servlet>
  58.     <servlet-name>MondrianXmlaServlet</servlet-name>
  59.     <servlet-class>mondrian.xmla.impl.DefaultXmlaServlet</servlet-class>
  60.     <init-param>
  61.       <param-name>CharacterEncoding</param-name>
  62.       <param-value>UTF-8</param-value>
  63.     </init-param>
  64.   </servlet>
  65.   
  66.         <servlet-mapping>
  67.         <servlet-name>wsChat</servlet-name>
  68.         <url-pattern>/MyWebSocket/websocket</url-pattern>
  69.     </servlet-mapping>
  70.   <servlet-mapping>
  71.     <servlet-name>MondrianXmlaServlet</servlet-name>
  72.     <url-pattern>/xmla</url-pattern>
  73.   </servlet-mapping>
  74.   <servlet-mapping>
  75.     <servlet-name>business-server-servlet</servlet-name>
  76.     <url-pattern>/*</url-pattern>
  77.   </servlet-mapping>
  78.   
  79.   <session-config>
  80.     <session-timeout>30</session-timeout>
  81.         <cookie-config>
  82.                 <http-only>false</http-only>  
  83.         </cookie-config>   
  84.   </session-config>
  85. </web-app>
复制代码
配置好了,还是一样,重启过tomcat了
TIM图片20180209103721.png
TIM图片20180209103655.png
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-2-9 10:46:17 | 显示全部楼层
是用wsChat访问的吗?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

95

主题

312

帖子

1437

积分

金牌会员

Rank: 6Rank: 6

积分
1437
QQ
 楼主| 发表于 2018-2-9 10:55:22 | 显示全部楼层
jishuang 发表于 2018-2-9 10:46
是用wsChat访问的吗?

这个地址   ws://localhost:8080/BusinessServer/wsChart
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-7-6 10:02 , Processed in 0.063372 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表