基于宝贝鱼(CshBBrain)开发聊天类应用 群发消息的问题

阅读更多

最近有网友 基于宝贝鱼(CshBBrain)开发聊天类应用 遇到群发、广播消息的问题,现已处理,将处理过程贴出来 供开发这方面应用的朋友参考,少走弯路。(宝贝鱼(CshBBrain) 的使用问题本想开一个群组讨论的,在iteye上我无法再创建群组了,只有贴到专栏来了)




请教一个在使用Websocket服务端时关于消息广播的问题

 
你好,想跟你请教个问题: 

在运行股票的那个示例程序时,配置文件中broadSwitch=1。 

但运行两个客户端页面时,只会有一个页面可以成功接收到消息,而另一个页面会进入onerror方法,请问这是为什么?我如何能查看onerror(event)的详细错误信息?event.data和event.text两个属性不行。 

谢谢!
Re: 请教一个在使用Websocket服务端时关于消息广播的问题

 
下载新版本的程序,这是一个bug,老版本的程序有,已经解决这个缺陷。 
http://cshbbrain.iteye.com/blog/1724397

请教一个在使用Websocket服务端时关于消息广播的问题

请问我如何才能在WebSocketProcesser或Service中接收客户端请求中的数据再把它广播出去?MasterServer.addBroadMessage(rs);调用这个方法会报错。 

谢谢!

 

请教一个在使用Websocket服务端时关于消息广播的问题

我想模仿Tomcat7的那几个WebSocket示例基于您的服务端实现一下,但对广播的使用目前还搞不清楚,做chat.html和snake.html两个实例时有困难,麻烦您能给简要说一说实现的思路吗?谢谢。

 

请教一个消息广播的问题

 

 

	public Response service(Client sockector, HashMap requestData){
		if(requestData == null){
			return null;
		}
		
		log.info(requestData.get(Constants.FILED_MSG));
		Response responseMessage = null;
		try{
			if(!MyStringUtil.isBlank(requestData.get(Constants.HANDSHAKE))){
				responseMessage = Response.msgOnlyBody(requestData.get(Constants.FILED_MSG));
			}else{
				responseMessage = Response.msgOnlyBody("Hello," + requestData.get(Constants.FILED_MSG));				
			}
		}catch(Exception e){
			e.printStackTrace();
			responseMessage = Response.msgOnlyBody("500处理失败了");			
		}
		
		return responseMessage;
	}

 

 请问,在Service中我如何广播消息。我尝试过这样

 

Response responseMessage = null;
			if(!MyStringUtil.isBlank(requestData.get(Constants.HANDSHAKE))){
				responseMessage = Response.msgOnlyBody(requestData.get(Constants.FILED_MSG));
			}else{
				responseMessage = Response.msgOnlyBody("Hello," + requestData.get(Constants.FILED_MSG));				
			}
MasterServer.addBroadMessage(responseMessage);

 

但是会报如下错误信息

 

java.lang.NullPointerException
	at com.jason.server.Response.msgRespose(Response.java:120)
 

麻烦您时间方便请指点一下该怎样实现。

     
  Re: 请教一个消息广播的问题

 

看了下你的问题,CshBBrain最新版本有个问题修改下就可以了。我直接贴代码:

MyStringUtil.java

添加属性:
public static final String CSHBBRAIN_CONTENT = "CSHBBRAIN_CONTENT";

修改方法:

public static HashMap parseKeyValue(String msg){    
    if(isBlank(msg)){
            return null;
        }
    
    String values = null;
        try{
        values = URLDecoder.decode(msg, CoderUtils.UTF8);
        }catch(UnsupportedEncodingException e){
            throw new UnsupportedCharsetException(CoderUtils.UTF8);
        }
        
        HashMap requestData = new HashMap();
        
        requestData.put(CSHBBRAIN_CONTENT, values);// 所有信息
    
        Matcher m = PARAM_PATTERN.matcher(values);
        int pos = 0;
        while (m.find(pos)) {
            pos = m.end();            
            requestData.put(m.group(1), m.group(2)); 
        }
        
        return requestData;
    }


Service.java
public Response service(Client sockector, HashMap requestData){
if(requestData == null){
return null;
}

Response responseMessage = null;

try{
if(!MyStringUtil.isBlank(requestData.get(Constants.HANDSHAKE))){
responseMessage = Response.msgOnlyBody(requestData.get(Constants.FILED_MSG));
}else{
MasterServer.addBroadMessage(Response.msgOnlyBody("hello " + requestData.get(MyStringUtil.CSHBBRAIN_CONTENT)));
responseMessage = Response.msgOnlyBody("hello " + requestData.get(MyStringUtil.CSHBBRAIN_CONTENT));
//responseMessage = Response.msgOnlyBody("var taskKey= " + requestData.get("taskKey")  + "; var resultData= '<-" + requestData.get("taskKey") +"->'");
}
}catch(Exception e){
e.printStackTrace();
responseMessage = Response.msgOnlyBody("500处理失败了");
}

return responseMessage;
}

 

     
  Re: 请教一个消息广播的问题

 
以上代码务必请下载最新版本 
http://code.google.com/p/cshbbrain/downloads/list

由于新版本的功能尚未开发完毕,这个问题将在下次更新版本时一并提交。

 

 

你可能感兴趣的:(CshBBrain,宝贝鱼,NIO,AIO,html5)