大家好,今天给各位分享pp服务器的一些知识,其中也会对暗黑2pp是什么意思进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

一、c++ websocketpp 怎么用

首先:在我们是要使用C++搭配现有的函数库来开发的,所以不太适合使用一般的网站服务器方案;而在稍微评估了一下后,后来是决定使用「WebSocket++」这个函数库,来做为C++环境的WebSocket Server开发方案。

WebSocket++的官方网站是:,他是采用BSD License的OpenSource、跨平台函数库,文件则都放在Github上(网页)。他目前最新的版本是0.3.x,在Github上要切换到「experimental」这个brahch;而这个版本的WebSocket++基本上是使用C++11以及Boost C++ Libraries里的ASIO(官网)来实作的Header-Only的函数库,所以在使用前不需要特别去建置这个函数库、只要在需要时去include他的Header档就可以了,相当地方便。

然后在WebSocket的功能方面,他除了有提供Server端的功能外,也可以用来开发Client端的程序,算是相当地完整;虽然他的板号还在0.3,好像还很新,不过实际上功能应该算是够用了~

1.文件准备

如果要使用WebSocket++的话,基本上就是先到GitHub上0.3.x这个分支:去把文件下来。而下来的文件里面,「websocketpp」这个文件夹,就是要使用这个函数库时,所有需要的文件了~而文件的部分,则是要连到他的网页(链结)去看,内容不算很完整,Heresy算是看着范例程序和原始码写出来的;这点算是Heresy觉得这个函数库做的比较差一点的地方,不过考虑到现在还是0.3版,也就不要要求太多了。

另外,由于他是基于Boost ASIO来开发网络的功能,所以也必须要Boost C++ Libraries来使用;Boost的官方网站是:。

而如果有需要用到TLS的加密连线的话,应该是会需要使用OpenSSL这个函数库(官网);如果不打算做加密连线的话,基本上是可以跳过这个函数库的。(Heresy没试过这部分)

2.基本概念

WebSocket++的基本使用说明,可以参考《Building a program with WebSocket++》这份文件。Heresy这边算是整理一下,自己玩过后的想法。

首先,要使用WebSocket++来开发程序的时候,基本上要include两种文件,一种是用来做组态设置(config)的,一种则是用来决定要开发的程序的脚色类型(Role)的。

Role

在Role的部分,主要就是分成Server和Client两种;Server就是用来开发WebSocket服务器的,而Client则是可以用来开发C++的WebSocket的用户端程序、连线到其他的??WebSocket Server做数据的存取。

如果要建立Server端的程序的话,就是要include server用的header档:

#include<websocketpp/server.hpp>

而之后则是就可以建立出websocketpp::server<>的物件,拿来做操作。

如果是要建立Client端程序的话,则是要include client的header档:

#include<websocketpp/client.hpp>

之后则是建立出websocketpp::client<>的物件来做连线。

而WebSocket++的server或client这两种类别,都是template的class,在建立时也需要指定要使用的config才可以。

Config

Config的部分,WebSocket++主要提供了三种类型:

config::core

config::asio

config::asio_tls

上面这三种类型,在WebSocket++是不同的结构,,config::core基本上是提供有限功能的设置,相对的他只会用到C++11的功能。而config::asio则是使用Boost ASIO做基础来提供完整的功能;config::asio_tls则是config::asio再加上TLS的连线加密功能。

而根据组合的不同,不同的config也需要include websocketpp/config的目录下、不同的header档:

Server

Client

core

core.hpp

core_client.hpp

pp服务器 暗黑2pp是什么意思

asio

asio_no_tls.hpp

asio_no_tls_client.hpp

asio_tls

asio.hpp

asio_client.hpp

而如果是以要建立一个使用Boost ASIO、没有TLS加密的Server的话,基本上就是要include

asio_no_tls.hpp

#include<websocketpp/config/asio_no_tls.hpp>

其他的组合,也可以依此类顶。

Endpoint

在决定要include哪两个文件后,接下来就可以在程序里面,建立出需要使用的WebSocket++物件了。

如果是要建立使用Boost ASIO、没有TLS加密的Server的话,基本上要include的文件就是:

#include<websocketpp/server.hpp>

#include<websocketpp/config/asio_no_tls.hpp>

而在控制用的物件的部分,则就是:

websocketpp:: server<websocketpp::config:: asio> mServer;

之后,所有的功能就都是针对mServer这个物件进行操作。而在WebSocket++里面,则是把它称为「endpoint」;通过组合出不同的endpoint,就可以实作不同的功能了。

Server的范例

基本上,因为Heresy的目的是要建立一个WebSocket Server让网页来连线,所以这边就只讲Server的部分了~而实际上,在《Building a program with WebSocket++》里,官方就有提供一个很简单的使用范例了~他的源代码如下:

#include<iostream>

#include<websocketpp/config/asio_no_tls.hpp>

#include<websocketpp/server.hpp>

typedef websocketpp:: server<websocketpp::config:: asio> server;

void on_message(websocketpp:: connection_hdl hdl, server:: message_ptr msg)

{

std::cout<< msg->get_payload()<< std::endl;

} int main()

{ server print_server;

print_server.set_message_handler(&on_message);

print_server.init_asio();

print_server. listen(9002);

print_server.start_aept(); print_server.run();

}

在这个范例里面,他是通过websocketpp:: server<websocketpp::config:: asio>这个Endpoint,来建立一个使用Boost ASIO、没有TLS加密的WebSocket Server。这个server程序在执行后,会持续去监听port 9002,当有信息传递进来的时候,就会触发到on_message()这个函数、并把接到的信息输出到命令提示字符的窗口上。

如果想要测试连线的话,可以考虑用 WebSocket.提供的

不过实际上,由于WebSocket++本身也有log的功能,所以除了收到的信息会被输出之外,还有很多纪录用的信息,也都会被输出在画面上,看起来可能会有点杂乱就是了。

另外,由于这个范例程序,只会从client接收信息,并不会传送数据给Server端,所以Echo Text的Log里面,并不会像连到ws:// echo.websocket.

在源代码的地方,首先就是建立出一个endpoint的server物件print_server,用来做后续的操作。

而在建立出print_server后,接下来要做的事情,包括了:

初始化ASIO

调用init_asio()这个函数,初始化内部的Boost ASIO的io_service(官网),作为后续网络连线等功能之使用。

设置连接埠

调用listen()这个函数,指定要监听的连接埠;这边是设置成9002。

而如果系统上有多个网卡的话,默认会监听所有的网络介面;如果需要的话也可以特别指定要针对哪个介面做监听。

开始接受连线

调用start_aept()开始接受输入。

进入主循环

调用run(),进入WebSocket++ Server的主循环。

之后程序就会进入主循环,直到Server被停下来。

那要怎么处理连线进来的信息呢?WebSocket++是通过提供各种「Handler」(callback function),来做事件的处理;在官方网站上,有列出可以使用的handler列表(页面)。

而在这个范例里,则是通过set_message_handler(),来设置当Server收到信息时,要执行的callback function,这里就是on_message()这个函数;这也是一般来说,一定会用到的callback function。

而message handler的callback function,会收到两个数据:

一个是websocketpp::connection_hdl型别的数据,是用来识别目前的连线用的;如果之后要传送信息给client的话,就必须要通过这个物件,来设置要把信息传送给谁。而如果有需要的话,也可以藉由server<>的get_con_fromhdl()来取得触发这个??事件的连线、以及他的资讯。

第二个资讯,则是websocketpp::server<>::message_ptr,里面储存的是传递进来的信息。一般来说,这会通过他的get_payload()函数,来取得传递进来的信息,而得到的数据,会是const string&。不过由于WebSocket也有可能是传递非文字的binary数据,所以可能会需要通过 get_opcode()这个函数,来辨别传递进来的数据的形式。

而在这个范例里面,on_message()这个函数,就是很单纯地把街道的资讯,通过iostream做输出了~

在网页上的这个范例里面,这个Server只有做接收的功能,并不会送信息给Client端。那如果要送信息给client端要怎么做呢?基本上就是调用server<>的send()这个函数就可以了。

在官方的example文件夹里,有个echo_server的目录,里面的echo_server.cpp

而他送出数据的方法,就是:

s->send(hdl, msg->get_payload(), msg->get_opcode());

这边可以看到,要调用sned()这个函数来传递数据,基本上是需要给他三个参数:

websocketpp::connection_hdl的物件,让Server知道是要传给哪个client。

要传递的数据,这边就是把收到的信息(msg->get_payload())再传出去;实际上send()有提供不同的介面,实际的数据型别可以是const void*或const string&。

最后,则是要有一个opcode,来指定要传??递的资讯的形式;如果是纯文字的话,基本上可以指定websocketpp::frame::opcode::TEXT。

而这个范例程序在执行後,如果一样使用 WebSocket.的来测试的话,就可以发现他的功能和 WebSocket.测试用的 ws://echo.websocket.

Windows/ Visual Studio上的问题

上面基本上就是WebSocket++使用上的基本用法。不过实际上,这样的源代码,在Heresy这边的Windows+ Visual Studio 2010/ 2012,都是没办法正确建置的。

最主要的问题,基本上应该算是VC++本身对Boost C++ Library的支援*问题吧…在Heresy测试的结果是发现,如果希望在VisualStudio 2010或2012上使用的WebSocket++的话,有部分的功能??必须要强制让WebSocket++去使用C++ 11的内建函数库,而不要去使用Boost的版本。

设置的方法,可以参考官方的《C++11 Support》这页。以Heresy这边的测试来说,至少functional和memory两个函数库,是需要使用C++11 STL的版本才行的;也就是说,必须要加上_WEBSOCKETPP_CPP11_MEMORY_和_WEBSOCKETPP_CPP11_FUNCTIONAL_这两个定义(因为MSVC不支援完整的C++11,所以不能用_WEBSOCKETPP_CPP11_STL_)。

但是,在加上这两个定义后,实际上会产生另一个问题,那就是std::min()和巨集版本的min()冲到的问题(参考);这个问题,比较简单的方法,就是在再额外定义一个NOMINMAX,来取消掉巨集版本的min()和max()了。

所以,实际上要让上面的程序可以正常运作,一个方法就是在原始码的一开始、include WebSocket++的Header之前,先加上下面三行:

#define NOMINMAX

#define _WEBSOCKETPP_CPP11_FUNCTIONAL_

#define _WEBSOCKETPP_CPP11_MEMORY_

或是在VC的专案属*的「组态属*」里面,找到「C/C++」的「前置处理器」,在「前置处*定义」的栏位里面,加上「NOMINMAX;_WEBSOCKETPP_CPP11_FUNCTIONAL_;_WEBSOCKETPP_CPP11_MEMORY_」了。

理论上,这两种方法应该都可以让MSVC可以正确地建置上面的范例程序。而这个问题Heresy也有回报给作者了(链结),就看之后有没有办法修正吧。

另外,Heresy在使用Visual Studio 2012的时候,虽然可以正确编译了,可是在执行阶段,则是会当掉。稍微追了一下源代码后,发现应该是Visual Studio 2012的std::strftime()这个函数(MSDN)有问题所造成的。

主要的问题是发生在 logger/ basic.hpp这个文件,里面定义的get_times*p()这个函数里面有透??过std::strftime()来打印出目前的时间,以做为纪录之用;而他定义的输出字串,则是一个长度30的C字串buffer。

由于他有试着输出时区的资讯(%z),而在Visual Sutdio里,如果在台湾的环境的话,他会是一个「台北标准时间」这样的文字;而这样的文字,再加上前面的时间资讯的会,就导致整个结果会超过30个字符。而在这个状况下,Visual Studio 2010只是会无法输出,但是在Visual Studio 2012,却可能是让程序整个当掉… orz

而解决方法呢?基本上应该是两种,一个是把buffer的大小改大、例如把它改成40(要改两个地方,一个是105行、一个是111行,参考),这样可以让字串够长、不会出问题;另一种方法,则是把105行里定义的时间格式字串「"%Y-%m-%d%H:%M:%S%z"」,最后面的「%z」拿掉,这样就不会去处理时区的资讯,也就比较不容易出问题了。

最后:这篇大概就这样了。内容,算是对WebSocket++的极简单介绍的~实际上,由于官方文件实在不足,所以学习起来有点累;不过,至少已经成功地用WebSocket++完成第一个WebSocket的Server端程序了~接下来,看看有什么特殊的想法,会再做补充吧。

二、暗黑2pp是什么意思

暗黑2pp指的是暗黑破坏神2(Diablo II)的私人服务器,pp即private server的缩写。这些服务器是由玩家自己搭建的,具有不同于官方服务器的特色,比如高爆率、自定义的规则、更多的游戏玩法等等。大部分暗黑2pp都是基于旧版本的游戏,因为官方已经不再提供新的更新,所以让玩家难以寻找新的挑战。暗黑2pp的出现丰富了暗黑2的游戏内容,让那些喜欢浸入玩家自定义的游戏玩法的玩家得到了更多选择,并且还可以享受那些已经不存在于官方版中的奇特道具和装备。

使用暗黑2pp需要有一些技术基础,这是因为玩家必须要进行与官方服务器完全不同的设置和安装,以允许游戏与自己的服务器通信。此外,为了确保服务器安全,管理者必须花费较多的时间和精力来防止内外部的攻击,维护服务器的稳定*。因此,许多玩家选择自己搭建私人服务器时会加入朋友和熟人,作为一种私人聚会体验。

使用暗黑2pp也存在一定的风险,因为这些私人服务器并不是由官方开发者开发和维护,所以安全*不能得到保证。服务器容易受到攻击,数据可能丢失或者受到破坏,另一方面,使用未经官方授权的服务器可能违反游戏站的规定,导致玩家的账号被管理员禁用或者被永久封禁。因此,虽然暗黑2pp提供了一种不同而有趣的游戏体验,但是玩家需要自己承担风险并思考自己的选择。

三、ipad安装的pp助手显示“服务器开小差啦”怎么解决

1、打开cydia--管理--软件--检查是否已经安装:【AppSync】补丁(根据*的iOS固件版本选择安装)(这个是iPA补丁,如果没有安装这个是无法安装iPA格式的软件)

解决方法(1):

请在3G或wifi网络操作以上步骤:

1.在Cydia--管理--软件源--编辑/添加--输入“apt.25pp.”--添加完成--进入“25PP手机助手源”--安装“AppSync”

解决方法(2):(此方法仅支持iOS5.X*安装)

如果在没有网络(网络是指WIFI或3G)的情况又想安装IPA补丁。请使用*助手的IPA补丁修复功能。

(此修复IPA功能与安装“AppSync for IOS5.0+”IPA补丁是一样的,请放心!)

1.将手机连接电脑打开*助手--*教程--图中的“修复”功能!

2.打设置--通用--检查访问权限是否开启(图示)--如果开启,请检查是否把安装应用程序关闭--重新开启即可。

(开启访问权限功能并将“安装应用程序”关闭是可以让AppStore不显示更新数字,如果关闭“安装应用程序”是导致无法安装软件的原因)