sentinel version : 1.3.0-GA
代码如下
@ServerEndpoint("/websocket/test/{requestId}") public class TestWebSocket {
private static final Logger logger = LoggerFactory.getLogger(TestWebSocket.class);
static {
initFlowRules();
}
@OnOpen
public void OnOpen(@PathParam(value="requestId") String requestId, Session session) {
Entry entry = null;
try {
entry = SphU.entry("HelloWorld");
System.out.println("hello world");
} catch (BlockException e1) {
System.out.println("block!");
} finally {
if (entry != null) {
entry.exit();
}
}
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(Session session) {
logger.info("close:{}", session.getId());
}
/**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息
* @param session 可选的参数
* @throws InterruptedException
*/
@OnMessage
public void onMessage(String message, Session session) {
}
/**
* 发生错误时调用
*
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) {
LoggerUtil.warn(logger, error, "websocket onError,sessionId={},status={}", session.getId(), session.isOpen());
}
private static void initFlowRules(){
List<FlowRule> rules = new ArrayList<FlowRule>();
FlowRule rule1 = new FlowRule();
rule1.setResource("HelloWorld");
rule1.setCount(20);
rule1.setGrade(RuleConstant.FLOW_GRADE_THREAD);
rule1.setLimitApp("default");
rules.add(rule1);
FlowRuleManager.loadRules(rules);
}
}
原提问者GitHub用户jsjchai
似乎只有当连接建立就绪时,才会调用用@OnOpen注释的方法。因此,在这里使用线程计数模式是没有意义的,因为这只是一个回调,可能只需要一点时间。
对于WebSocket来说,连接是持久连接,所以您可能只想限制处理消息或限制连接数量?您必须限制建立连接的并发线程数。
原回答者GitHub用户sczyh30
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。