pomelo入门

【即插即用模块】Mamba篇 | CVPR 2025 | MaIR:新型Mamba扫描方式+通道混洗注意力,全任务涨点! MaIR是一种新型图像恢复模型,通过嵌套S形扫描策略(NSS)和序列混洗注意力(SSA)改进传统Mamba方法。NSS采用条纹区域划分和S形扫描路径,既保留图像局部性又维持空间连续性;SSA通过通道洗牌和门控机制增强特征聚合。该模块创新性地融合多路径选择性扫描、深度卷积和注意力机制,在保持O(N)计算复杂度的同时,显著提升超分辨率和去噪等任务的性能表现(PSNR提升0.2-0.5dB)。代码实现包含特征洗牌、组卷积等关键操作,适用于高分辨率视觉任务,可作为即插即用组件替代传统自注意力模块。 阅读详情

一直觉得没有读过什么node.js的框架,觉得很遗憾。。。好了,从今天开始,读pomelo的源代码。。。

网易开源的游戏服务器框架,看介绍。。应该还不错。。先看看吧。。。

从它给的聊天的例子来开始吧。。。比较简单。。。无非就是web端通过websocket发送数据到服务器,然后服务器再广播给同房间的人就ok了。。。

我们先来看看pomelo发送数据的格式吧,也就是它的encode方法:

 //用于将发送的数据编码为pomelo的格式,其中id为客户端提供,用于区别待会消息的确认
 //route可以理解为要将数据发送到什么地方去
 //msg就是实际要发送的数据,json格式
 //前5个int是头部,头部的前4个是id,第5个表示数据表示route的长度,然后剩下的保存要发送的数据
Protocol.encode = function(id,route,msg){
    var msgStr = JSON.stringify(msg);
    if (route.length>255) { throw new Error('route maxlength is overflow'); }
    //强类型数组
    var byteArray = new Uint16Array(HEADER + route.length + msgStr.length);
    var index = 0;
    byteArray[index++] = (id>>24) & 0xFF;
    byteArray[index++] = (id>>16) & 0xFF;
    byteArray[index++] = (id>>8) & 0xFF;
    byteArray[index++] = id & 0xFF;
    byteArray[index++] = route.length & 0xFF;
    //先把他们穿华为unicode码
    for(var i = 0;i<route.length;i++){
        byteArray[index++] = route.charCodeAt(i);
    }
    for (var i = 0; i < msgStr.length; i++) {
        byteArray[index++] = msgStr.charCodeAt(i);
    }
    //将这些unicode码转化为字符串
    return bt2Str(byteArray,0,byteArray.length);
};
其实encode的过程还是相对比较简单的吧,分为头部,route和数据3个部分,如图:


这里位的单位是16位的无符号int(新的版本的javascript引入了强类型数组),先将数据全部转化为了unicode码,然后再将数据转化为字符串。。。

接下来来看看pomelo在web端怎么进行操作(pomeloclient.js)。。。先来看看init函数:

  pomelo.init = function(params, cb){
    pomelo.params = params;
    params.debug = true;
    var host = params.host;
    var host = "121.199.40.246";   //主机地址
    var port = params.port;   //主机端口

    var url = 'ws://' + host;
    if(port) {
      url +=  ':' + port;
    }
//进行websocket的链接
    socket = io.connect(url, {'force new connection': true, reconnect: false});

    socket.on('connect', function(){
      console.log('[pomeloclient.init] websocket connected!');
      if (cb) {
        cb(socket);
      }
    });

    socket.on('reconnect', function() {
      console.log('reconnect');
    });
    //如果收到了数据,那么调用processMessage来处理这些数据
    socket.on('message', function(data){
      if(typeof data === 'string') {
        data = JSON.parse(data);
      }
      if(data instanceof Array) {
        processMessageBatch(pomelo, data);
      } else {
        processMessage(pomelo, data);
      }
    });

    socket.on('error', function(err) {
      console.log(err);
    });

    socket.on('disconnect', function(reason) {
      pomelo.emit('disconnect', reason);
    });
  };
代码很容易就能懂,就是建立websocket的连接,然后设置一些监听函数,这里我把host的ip改成了自己服务器的ip地址,不然的话使用的是127.0.0.1,那么就只能部署在本地了。。。

接下来是比较重要的request功能,也就是用于向pomelo后台发送数据

//用于向pomelo后台发送数据,route是要发送到的地方
//接下来的参数可以是要发送的数据,以及消息确认的回调函数
  pomelo.request = function(route) {
    if(!route) {
      return;
    }
    var msg = {};
    var cb;
    arguments = Array.prototype.slice.apply(arguments);
    if(arguments.length === 2){
      if(typeof arguments[1] === 'function'){
        cb = arguments[1];
      }else if(typeof arguments[1] === 'object'){
        msg = arguments[1];
      }
    }else if(arguments.length === 3){
      msg = arguments[1];
      cb = arguments[2];
    }
    msg = filter(msg,route);
    id++;   //当前发送的数据的id
    callbacks[id] = cb;   //当发送的这个数据有返回的时候,用这个回调函数来处理
    var sg = Protocol.encode(id,route,msg);   //将数据转化为规定的格式
    socket.send(sg);
  };
这里参数可以有3个,第一个是route,也就是要发送到的地方,后面两个参数是要发送的数据,可以带一个毁掉函数,用于发送的数据收到了后台的确认之后执行。。。看起来像是消息服务器的pub的过程。。。

嗯,接下来来看看web端是如何调用request来发送数据的吧:

	//按了回车按钮之后,执行的函数
	$("#entry").keypress(function(e) {
		var route = "chat.chatHandler.send";  //要发送到的route
		var target = $("#usersList").val();
		if(e.keyCode != 13 /* Return */ ) return;
		var msg = $("#entry").attr("value").replace("\n", "");
		if(!util.isBlank(msg)) {
			pomelo.request(route, {
				rid: rid,   //room的id
				content: msg,   
				from: username,    
				target: target
			}, function(data) {
				$("#entry").attr("value", ""); // clear the entry field.
				if(target != '*' && target != username) {
					addMessage(username, target, msg);
					$("#chatHistory").show();
				}
			});
		}
	});
这里我们可以看到了这个route的值是什么了。。。这种route的方式让我想起来了ruby on rails,直接与后台的文件夹对应起来就好了。。。


貌似后台的route也就是按照这样的方式来组织的吧。。。还算挺方便的。。。

接下来我们来看看后台chatHandler的send方法的定义吧:

handler.send = function(msg, session, next) {
	var rid = session.get('rid');   //获取当前的房间的id
	var username = session.uid.split('*')[0];
	var channelService = this.app.get('channelService');
	var param = {
		route: 'onChat',
		msg: msg.content,
		from: username,
		target: msg.target
	};
	channel = channelService.getChannel(rid, false);   //用于向当前房间广播的channel

	//the target is all users
	if(msg.target == '*') {
		channel.pushMessage(param);
	}
	//the target is specific user
	else {
		var tuid = msg.target + '*' + rid;
		var tsid = channel.getMember(tuid)['sid'];
		channelService.pushMessageByUids(param, [{
			uid: tuid,
			sid: tsid
		}]);
	}
	next(null, {
		route: msg.route
	});
};
msg就是客户端传过来的数据,另外还有session,这个应该是pomelo来维护的吧。。。


好了,这篇文章略微看了看pomelo提供的chat的例子的web端是如何给后台发送数据的。。。下一篇在来看看后台到底是怎么运行的吧。。。。

破盾实录|Vueling航空阿卡迈防护逆向:从503挑战到Cookie生成的全流程拆解 摘要:文章分享了作者在爬取西班牙伏林航空(Vueling)机票数据时,遭遇阿卡迈(Akamai)防护系统的实战经历。起初简单的请求被拦截返回503错误,分析发现阿卡迈通过混淆JS代码实施"挑战-验证"机制,需模拟真实浏览器环境才能获取有效Cookie。作者详细拆解了逆向过程:从抓包分析JS挑战流程,到破解代码混淆和控制流平坦化,最终用Python+Pyppeteer成功模拟浏览器特征,突破防护获取数据。整个过程涉及JS反混淆、环境检测绕过和Cookie生成验证等关键技术点,为类似防护系统 阅读详情

相关推荐

ATM火控电容改造实战:提升速凌无刷电机动力与系统稳定性

在嵌入式系统与电机驱动领域,电源完整性是保障电路稳定运行的核心基础。其核心原理在于通过合理的电容网络设计,为负载提供瞬时大电流并滤除高频噪声,从而维持电压稳定。这项技术的核心价值在于能显著提升系统的动态响应能力与可靠性,避免因电压跌落导致微控制器复位或功率器件过应力。典型的应用场景包括无人机电调、机器人关节驱动以及各类需要快速响应的伺服系统。本文聚焦于水弹发射器ATM火控系统的硬件迭代,通过详解电容的选型、布局与焊接流程,特别是针对速凌五代无刷电机的高启动电流特性,系统性地阐述了如何通过强化电源储能与芯片去

weixin_33868027的博客 557

Pomelo 使用教程

继"Hello World"之后,我们参照官方文档,以一个"Chat"为例进一步学习Pomelo的使用。在本文中,将会涵盖筛选器、路由及消息压缩、RPC调用、组件等主要Pomelo特性的使用。 概述 "Chat"源码下载及安装 扩充服务器及Router 添加筛选器(Filter) 路由压缩 Protobuf压缩数据 RPC调用 组件的使用 Admin模块 1. 概述 在使用本教程前,请注意以下几点: 本教程适用于对Pomelo零基础的用户,如果你已有一些相关基础,那么可以跳过本教程,直

awhlmcyn的博客 3890

ptrade从零开始学量化第1期【ptrade如何新建策略、新建回测、新建交易】什么是ptrade量化交易?

回测之前需要对开始时间、结束时间、回测资金、回测基准、回测频率几个要素进行设定,设定完毕后点击保存。然后再点击回测按键,系统就会开始运行回测,回测的评价指标、收益曲线、日志都会在界面中展现。可以选择不同的业务类型(比如股票),然后给策略设定一个名称,添加成功后可以在默认策略模板基础上进行策略编写。交易界面点击新增按键进行新增交易操作,策略方案中的对象为所有策略列表中的策略,给本次交易设定名称并点击确定后系统就开始运行交易了。交易开始运行后,可以点击交易详情,查看策略评价指标、交易明细、持仓明细、交易日志。

GJ57017_wx的博客 2483

pomelo分布式聊天服务器详解

pomelo分布式聊天服务器详解   2014-01-05 11:43:49|  分类: node |  标签:pomelo  pomelo聊天  nodejs分布式聊天  pomelo分布式  |举报|字号 订阅 说来也惭愧,知道pomelo框架已经一年有余了,最近因为有开发IM的需求,但却是第一次部署安装pomelo框架,对不起网易开发团队的朋友~ pomelo的

chaixinke的专栏 4687

NVIDIA Orin AGX开发环境搭建避坑指南:从Ubuntu 22.04到ROS2完整配置流程

本文详细介绍了NVIDIA Orin AGX开发环境搭建的全流程,从Ubuntu 22.04系统安装到ROS2深度优化,涵盖驱动部署、CUDA环境配置、散热与功耗管理等关键步骤。特别针对Orin AGX的特性提供了实用避坑指南和性能优化技巧,帮助开发者高效完成开发环境配置。

weixin_28340315的博客 451

避坑指南:OpenWebUI+SearXNG联网搜索的5个常见配置错误及解决方法

本文详细解析了OpenWebUI与SearXNG整合过程中常见的5个配置错误及解决方案,包括JSON格式配置陷阱、国内搜索引擎缺失、连续搜索失效等问题。通过实战验证的优化策略,帮助开发者避免性能下降和功能异常,提升大模型与搜索引擎的协同效率。

jenkins8butler的博客 819

pomelo使用笔记

简单介绍 pomelo是网易12年底出品的一个基于node.js的游戏服务器框架,其设计初衷是游戏服务器, 不过在设计、开发完成后发现pomelo是个通用的分布式实时应用开发框架。 1.1.一些资源地址 github:https://github.com/NetEase/pomelo 官网:http://pomelo.netease.com/ api:http://pomelo.netea...

嘿嘿 1万+

【Unity 实用工具篇】✨| 受击插件Feel 详细教程,开发游戏时更好的操控 游戏打击感

在一个游戏中,游戏手感对于游戏的整体游玩体验是非常重要的,而游戏手感中有一个很重要的点:打击感 那本篇文章就来讲一下打击感中的受击反馈部分。 在游戏中经常会用到攻击敌人,敌人扣血,执行某些受击功能的执行,尤其是对于有战斗场景的游戏来说,这就是标准的受击反馈。 所以引出本篇文章的主角:受击插件 Feel 的使用,2D和3D游戏都可以使用。

努力前行,总会成为自己心中的那道光 3万+

pomelo中的基本概念

一 连接流程 client到gate服务器获取connector服务器的ip和port; 二 通讯类型 client和server通讯分三种: 1 request - response 客户端发送请求, 服务器异步响应。 方法: pomelo.request(url, msg, callback); 参数: url: 请求地址, 完整地址三个部分: 服务器类型、 服务端相应的

寒风的技术博客 1万+

太阳敏感器:卫星姿态控制的“指南针

在卫星姿态控制系统中,太阳敏感器(Sun Sensor) 是至关重要的光学姿态敏感器之一。它通过探测太阳光的方向,为卫星提供关键的姿态参考信息,确保卫星能够正确调整自身方位,维持稳定的对日定向,保障能源供应和任务执行。

ScilogyHunter的博客 1731

【WRF-Urban】增加动态空间热排放数据以替换人为热排放参数

增加动态空间热排放数据以替换人为热排放参数

WW、forever的博客 1044

pomelo 源码结构

源码在github上面,通过如下命令,获得: $ git clone https://github.com/NetEase/chatofpomelo-websocket.git $ git checkout tutorial-starter 这个是很简单的应用,其代码结构如下图: game-server game-server目录放的是所有游戏服务器的逻辑,以文件ap

bugall的专栏 2110

基于STM32L4XX、HAL库的ESP32-C3-WROOM-02-N4 WIFI模块驱动程序设计

支持802.11 b/g/n Wi-Fi (2.4GHz)RISC-V 32位单核处理器,主频高达160MHz。封装尺寸:18mm × 20mm × 3mm。工作温度范围:-40°C ~ 85°C。// 设置WiFi模式为STA。支持Bluetooth 5 (LE)// 发送AT指令测试通信。// 检查响应是否包含OK。内置4MB SPI Flash。// 连接TCP服务器。// 发送HTTP请求。// 初始化UART。// 建立TCP连接。低功耗设计,适合IoT应用。

zhusl6688的博客 385

pomelo入门02

距离上一篇pomelo已经有一段时间了吧,总是有一些事情要做。。 这一篇来写pomelo的application的创建过程。。当然例子还是以官方的chat。。。。主要是来分析下面这段代码: var app = pomelo.createApp(); 我们首先来看看pomelo的定义吧: var fs = require('fs'); var path = require('pat...

嘿嘿 448

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pomelo入门01

一直觉得没有读过什么node.js的框架,觉得很遗憾。。。好了,从今天开始,读pomelo的源代码。。。 网易开源的游戏服务器框架,看介绍。。应该还不错。。先看看吧。。。 从它给的聊天的例子来开始吧。。。比较简单。。。无非就是web端通过websocket发送数据到服务器,然后服务器再广播给同房间的人就ok了。。。 我们先来看看pomelo发送数据的格式吧,也就是它的encode方法: ...

嘿嘿 728

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Pomelo入门03

这篇文章要分析如下部分的代码: // app configure app.configure('production|development', function() { // route configures app.route('chat', routeUtil.chat); //chat是server类型,第二个是route函数 // filter configures a...

嘿嘿 357

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Pomelo 新手入门(一)

Pomelo 新手入门(一) 前言 由于目前pomelo公开资料没有什么教程类的,打算花一周时间学习一下pomelo.所以就简单的写个学习笔记,用来记录一下。 应该会有7篇,这篇应该是星期一学习的量,由于各种原因,总结慢了。。。 通读api 个人认为,竟然要使用一个框架,对于框架提供的api必须要烂熟与心,pomelo的api 还是挺少的,所以量化一下,让初学者感觉读

zhou_xtao的专栏 8871

【Pomelo源码分析】2016-09-20 入门(pomelo命令)

Pomelo源码分析第一篇, 从pomelo命令开始

u010334580的博客 2633

Pomelo 新手入门(二)

Pomelo 新手入门(二) 前言 昨天,简要的介绍了客户端如何发起对Pomelo的请求和处理pomelo响应,今天,我们说一下,Pomelo服务端如何处理请求响应以及如何开始我们服务端代码的编写。 Pomelo 请求与响应 Pomelo请求响应流程图。 在pomelo 请求响应模型中,它只有三层。 发起请求与响应的客户端。接受,响应请求的Frontend。

zhou_xtao的专栏 3205

pomelo入门04

写完前面的两篇文章,一直走的都是master服务器的流程,那么这一篇就真正涉及到master服务器的启动过程了,在真正开始之前,先回顾一下前面的两篇文章。。 (1)创建app的过程,这部分主要要完成的功能是读入用户定义的配置参数,并保存和处理这些配置参数。 (2)启动app的过程,这部分主要要完成的功能是load组件,完成对组件的包装(前面已经对master组件进行了说明,在真正的master...

嘿嘿 292

Pomelo 新手入门(四)

Pomelo 新手入门(四) 前言 今天我们介绍一下Channel 广播机制和RPC 的使用。 Channel 对于一个游戏服务器,而言,把消息推送给玩家,这是一个很基础的功能,在pomelo 里面用Channel 进行消息的推送服务,要进行消息的推送,Channel提供了两种方式: 匿名Channel具名Channel 匿名Channel 什么是匿名

zhou_xtao的专栏 1919

Pomelo 新手入门(三)

Pomelo 新手入门(三) 前言 今天,我们谈谈Pomelo的会话机制 会话机制 从pomelo 的api 文档我们可以发现,有三个大类与session有关 LocalSessionServiceSessionServiceLocalSession Session 介绍 从pomelo 的api文档中我们可以总结出: SessionService 是只

zhou_xtao的专栏 3329

(pomelo系列入门教程)深入浅出node.js游戏服务器开发——基于Pomelo的MMO RPG开发

在上一篇文章中,我们介绍了如何使用Pomelo来搭建聊天服务器。在这篇文章中,我们为大家介绍如何使用Pomelo框架来搭建MMO RPG服务器,并分析其设计思路和实现方法。以此来帮助大家更好的理解和使用Pomelo框架,理解Pomelo框架游戏开发的基础流程,使用方法和设计理念。 本文中的游戏服务端架构,只是为了说明Pomelo的开发理念和设计思路,并不是基于Pomelo开发的唯一方案,开发者完...

Allen_Walker_QAQ的博客 1421

Nodejs学习笔记(十六)--- Pomelo介绍&入门

目录 前言&amp;介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json 配置adminServer.json 解决服务器分配问题 实现gate.gateHandler.queryEntry 实现chat服务器c...

weixin_33804990的博客 335

(pomelo系列入门教程)深入浅出node.js游戏服务器开发——Pomelo框架的设计动机与架构介绍

一、Pomelo的定义和组成 以下是Pomelo官网给出的最初定义:Pomelo是基于node.js的高性能,分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发。 Pomelo最初的设计初衷是为了游戏服务器, 不过我们在设计、开发完成后发现pomelo是个通用的分布式实时应用开发框架。它的灵活性和可扩展性使p

mywcyfl的专栏 4589
上一篇: java线程池的实现原理(netty)
下一篇: TCP/IP之buff分析m_buff与sk_buff
fjs_cloud
博客等级 码龄15年 248粉丝 192原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值