JFinal整合WebSocket,服务端怎么主动给客户端发送消息?

webSocket处理类


com.zr.platform.websocketjava.io.IOExceptionjava.util.Setjava.util.concurrent.CopyOnWriteArraySetjava.util.concurrent.atomic.AtomicIntegerjavax.websocket.javax.websocket.javax.websocket.javax.websocket.Sessionjavax.websocket.server.(=)
WebSocketController {
    String = AtomicInteger = AtomicInteger()Set<WebSocketController> = CopyOnWriteArraySet<>()String =Session () {
        = + .getAndIncrement()}

    (Session session) {
        .= session.add()System..println(+ session.getId())String message = String.()(message)}

    (Session session) {
        System..println(+ session.getId()).remove()String message = String.()(message)}

    (String messageSession session) {
        System..println(+message++session.getId())String response = String.(message)(response)}

    (String msg) {
        (WebSocketController client : ) {
            {
                (client) {
                    client..getBasicRemote().sendText(msg)}
            } (IOException e) {
                System..println().remove(client){
                    client..close()} (IOException e1) {
                    }
                String message = String.(client.)(message)}
        }
    }
}


新加一个Handler拦截websocket请求

com.zr.platform.websocketjava.util.regex.Patternjavax.servlet.http.HttpServletRequestjavax.servlet.http.HttpServletResponsecom.jfinal.handler.Handlercom.jfinal.kit.StrKitWebSocketHandler Handler{
    Pattern (String filterUrlRegx) {
        (StrKit.(filterUrlRegx))
            IllegalArgumentException()= Pattern.(filterUrlRegx)}
    (String targetHttpServletRequest requestHttpServletResponse response[] isHandled) {
        (.matcher(target).find())
            .handle(targetrequestresponseisHandled)}

}


在JFinal配置文件里配置 (MainConfig)

(Handlers me) {
me.add(WebSocketHandler())}



客户端页面

websocket = (in window){
                  websocket = WebSocket()}
          {
                 ()
              }

           websocket.= (){
              console.()}websocket.= (event){
                   console.()}

           websocket.= (event){
                  console.(event.data)}

          websocket.= (){
                   console.()}

           window.= (){
                   websocket.()}

           (innerHTML){
                   document.().+= innerHTML + }

          (){
                   websocket.()}

          (){
                  message = document.().valuewebsocket.(message)}


最后想知道服务端怎么主动给客户端发送消息?在其他类中怎么调用webSocket里的方法?

评论区

Ghai、海

2017-12-21 10:42

session.getBasicRemote().sendText();

Ghai、海

2017-12-21 10:50

逻辑写在service层, 其他类调用就用Duang.duang()

xiao.chen

2017-12-21 14:56

@Ghai、海 给单个客户端发送请求的时候,要找到是哪个session,session是存在set里面的,请问怎么获取哪个客户端?

xiao.chen

2017-12-21 15:18

@Ghai、海 我项目里的session是存在set集合里面的,CopyOnWriteArraySet。

lyh061619

2017-12-21 20:42

兄弟提问请移到反馈栏目,当前模块是分享栏目,谢谢配合下

Ghai、海

2017-12-22 11:16

@ServerEndpoint(value ="/websocket/{userId}")

Ghai、海

2017-12-22 11:17

@OnOpen
public void onOpen(@PathParam("userId") int userId, Session session) {
webSocketService.onOpen(userId, session);
}

Ghai、海

2017-12-22 11:18

如果需要单独推送消息, 就需要对session做绑定操作并缓存.

xiao.chen

2018-01-13 16:39

天朝子民

2019-03-28 15:33

@Ghai、海 谢谢,你的回复帮助挺大~

热门分享

扫码入社