请选择 进入手机版 | 继续访问电脑版

NoahFrame

 找回密码
 Register Now
搜索
热搜: redis mysql tutorial
查看: 601|回复: 3

新人求助

[复制链接]

1

主题

2

帖子

29

积分

Newbie

Rank: 1

积分
29
发表于 2017-8-30 18:53:34 | 显示全部楼层 |阅读模式
求助几个基础问题,福利大家

1、如果我在loginserver只能http请求,那么具体要怎么才能实现这个http的监听?那么如果是https呢?
2、如果我想登陆进入游戏去处理游戏逻辑,那么客户端需要连接的是哪个服务器?这个服务器的端口又在哪里修改?注意什么?
3、通过什么来判断进入哪个model来处理客户端发来的数据?
4、我怎么给一个玩家发送推送消息?部分玩家发送推送消息?怎么给全部玩家发送推送消息?
5、我看到已经支持websocket了,如果客户端使用webscoket去连接服务器,那么他们消息交流的格式是怎样的?

回复

使用道具 举报

30

主题

111

帖子

632

积分

Administrator

Rank: 9Rank: 9Rank: 9

积分
632
发表于 2017-8-31 04:13:11 | 显示全部楼层
1:        m_pHttpNetModule->AddReceiveCallBack("json", this, &NFCMasterNet_HttpServerModule::OnCommandQuery);
        m_pHttpNetModule->AddNetCommonReceiveCallBack(this, &NFCMasterNet_HttpServerModule::OnCommonQuery);
https 需要增加ssh链接即可

2:连接proxy,proxy会转发消息到gameserver,服务器端口看 server.xlsx文件,所有的server id全局唯一,端口不冲突
3: 服务器的业务处理,属于抢占式处理,那个module 关注了哪条消息,自己添加callback函数就会得到回调,比如        m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_REQ_MOVE, this, &NFCGameServerNet_ServerModule::OnClientReqMoveProcess);

4:NFCGameServerNet_ServerModule::OnClientReqMoveProcess 看这个函数内部,会调用广播,同理,其他类似的函数都会有重载

5:websocket目前消息帧的数据为一个统一body string,格式自定。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

29

积分

Newbie

Rank: 1

积分
29
 楼主| 发表于 2017-9-5 18:07:56 | 显示全部楼层
Ketoo 发表于 2017-8-31 04:13
1:        m_pHttpNetModule->AddReceiveCallBack("json", this, &NFCMasterNet_HttpServerModule::OnCommandQuer ...

我这边前段是用websocket,现在nf工程编译完成,运行了,要怎么样修改,我的前端才能连接上服务器?
回复 支持 反对

使用道具 举报

1

主题

4

帖子

31

积分

Moderator

Rank: 7Rank: 7Rank: 7

积分
31
发表于 2017-9-7 18:19:53 | 显示全部楼层
5、关于websocket
目前NF实现了一个websocket module,payload为txt格式,协议交互在我目前实际的应用中采用了json格式,对于图片、语音等数据采用了base64转换
消息的注册方式类似于NF的NFNetModule

  1.         m_pWSModule->SetEventCallBack(this, &NFCHelloWorld::OnWebsocketEvent);
  2.         m_pWSModule->SetReceiveCallBack(this, &NFCHelloWorld::OnWebsocketMessage);
复制代码
可以参照Tutorial5

贴一个实际项目中的使用方式:
  1. AddProcesser ( GAME_MSG_ID::MSG_ENTER_ROOM, this, &GameModule::OnEnterRoom );
  2.     AddProcesser ( GAME_MSG_ID::MSG_LEAVE_ROOM, this, &GameModule::OnLeaveRoom );
复制代码
  1. template<typename BaseType>
  2.         bool AddProcesser(ui32 nMsgID, BaseType* pBase, void (BaseType::*handler)(SOCK_FD,ui32 nMsgID, ui32 nPlayerID, const std::string& strJsonMsgData))
  3.         {
  4.                 if (m_MsgProcesser.find(nMsgID) != m_MsgProcesser.end())
  5.                 {
  6.                         return false;
  7.                 }

  8.                 GAME_PROCESS_FUNCTOR functor = std::bind(handler, pBase, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4);
  9.                 GAME_PROCESS_FUNCTOR_PTR functorPtr(new GAME_PROCESS_FUNCTOR(functor));
  10.                 m_MsgProcesser.emplace(nMsgID, functorPtr);
  11.                 return true;
  12.         }
复制代码


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | Register Now

本版积分规则

 

GMT+8, 2018-8-15 17:43 , Processed in 0.070483 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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