lbs游戏源码-基于即时通讯和LBS技术的位置感知服务(一)

1. 前言和问题

公司近日举办了2011年度创新设计大赛。 年底的时候,准备写写2010年以来Android开发的心得和心得。有朋友刚好想到一个想法:如果A和B在不同的地方,这样的设计可以实现吗? 功能,让A和B能够感知对方的位置信息。

于是我整理了一下思路,说白了就是两个问题:一是实现信息的即时传输,二是实现基站/wifi和GPS的定位。

1、实现消息的即时传递:说到这个问题,大家应该能想到QQ、MSN、Gtalk等即时通讯软件。

2、定位:这让人想起现在非常流行的LBS服务(Location Based Services)。LBS的详细介绍请去百度百科

2、应用场景

即时通讯和LBS这两种流行技术引出了我们的主角:位置感知服务。 那么,当时的情景是怎样的呢? 下面是我想到的几个反例(还有很多,大家可以充分发挥想象力):

1.手机制造商通过设备中的外部定位服务来跟踪手机的位置。 例如,苹果官方推出的“FindMyiPhone”移动定位服务,可以通过MobileMe账户定位iPhone的当前位置,可以帮助机主找到自己的iPhone。

2.当你和同学去郊区旅游时,你会迷路吗? 如果这时候你有一部手机(Android、iPhone、Symbian或其他手机)但是安装了一个可以实现同学之间实时位置共享并在地图上显示你所在位置的应用程序,那么问题就很容易解决了。处理。

同样,同学间自驾游、人员追踪、突发暴风雨、急救等领域都可以派上用场。

3.寻找问题的解决方案

1.关键问题:即时通讯。 由于上述项目都积累了位置应用的经验,定位不是问题。 需要更多精力的地方是实现消息的即时传递。

2、分析要求:根据提出的问题,A发送的信息必须及时到达B,反之亦然,B发送的信息也必须及时到达A。 目前还没有这些双工实时通信的相关项目经验。

3. 最简单的实现可能使用协程(Polling)。 在这个问题中,协程是指使用RESTful Web服务(我们手机项目中常用的服务器套接字形式)来获取(GET)A或B对方的更新。 但这些方法都有缺点:一是减轻服务器的负担,想想如果每个客户端每隔1分钟访问一次服务器,而大多数情况下服务器不更新数据,那么服务器的负担就非常浪费了。相比之下,很难实现1分钟实时更新; 第二,对于联通设备,比如手机,协程会浪费手机最宝贵的资源——电量。

4、解决办法是长连接。 PubSub(发布/订阅,发布/订阅)是一种使用异步消息传递合约的架构技术,其中发布者和任何订阅者都是前馈的。 在需要向大量客户端发送更新通知的情况下,此功能使 PubSub 成为适当的可扩展性选择。

5.搜索相关资料后,我决定尝试使用基于XMPP的PubSub服务[Extensible Messaging and Presence Protocol,可扩展消息传递和存在合约]

1.什么是XMPP?

在介绍XMPP之前,我们先来说说GTalk。 GTalk是Google推出的一款IM(InstantMessaging,即时通讯)软件,类似于QQ、MSN。 从技术角度来看,GTalk与QQ、MSN的区别在于它们使用不同的通信合约。 QQ使用自己的私有合约(未公开),MSN也使用自己的私有合约。 GTalk 使用 XMPP(ExtensibleMessageingandPresenceProtocol,可扩展消息和状态契约)。 这些通信合约是开放式合约lbs游戏源码,许多 IM 使用 XMPP。

XMPP是目前四大主流IM合约之一。 另外三个合约是:IMPP(InstantMessagingAndPresenceProtocol)、PRIM(PresenceandInstantMessagingProtocol)和SIMPLE(SIPforInstantMessagingandPresenceLeveragingExtensions)。

在这四种合约中,XMPP 是最灵活的。 XMPP是一种基于XML的契约,它继承了XML的灵活性和可扩展性。 因此,基于XMPP的应用程序还具有强大的灵活性和可扩展性。 扩展的XMPP可以通过发送扩展信息来处理用户的需求,并在XMPP之上构建内容发布系统和基于地址的服务等应用。 此外,XMPP 还包括服务器端的软件合约,使其能够与另一端通信,从而使开发人员更容易构建自定义应用程序或向系统添加功能。

2. XMPP合约网络架构

XMPP的特点是将复杂性从客户端转移到服务器端。 这使得在客户端的编译变得非常容易,并且也很容易更新系统功能。 XMPP 中定义了三种角色:XMPP 客户端、XMPP 服务器和网关。

客户端:通过TCP套接字与XMPP服务器通信

服务器:还承担客户端信息记录、连接管理和信息路由的功能

网段:负责与异构即时通讯系统互联

3. XMPP合约的地址格式(标志)

每个客户端都需要有一个用于定位的地址标识符,在XMPP中称为JID(JabberID)。地址表示法格式如下

[节点“@”]域[“/”资源]

例如:

charley@gmail.com/spark

格式与邮件地址格式类似,但增加了资源项(非必填)。 上面的例子可以理解为:一个charley用户在gmail.com服务器上注册,并使用spark客户端软件登录。资源(resource)仅用于标识属于该用户的位置或设备。 一个用户可以同时连接多个资源的同一个XMPP服务器(说白了就是用来支持同一个账号的多个客户端登录)。

用户地址标识的认证由提供XMPP服务的服务器进行。 例如,在gmail服务器中注册的帐户由gmail服务器验证。 其他服务器向gmail.com域名发送的数据包,经过域名查询和服务间验证后,都会发送到gmail服务器,无论gmail服务器与下级账户之间的通信如何。

4、为什么使用XMPP方案(主要列出了优点,缺点就不列出来了,其实我们关系不大)

1.开放——XMPP合约免费、开放、开放,但又易于理解。 并且在客户端、服务器、组件、源码库等方面,已经有多种实现。

2. 标准——互联网工程任务组 (IETF) 已将 Jabber 的核心 XML 流契约以 XMPP 的名义列为已批准的实时通信和呈现技术。 XMPP的技术维度已在RFC3920和RFC3921中定义。 任何 IM 提供商都可以根据 XMPP 合同与 GoogleTalk 连接。

3、拒绝可用性——第一个Jabber(现在的XMPP)技术是由Jeremie Miller于1998年开发的,现在相当稳定; 数百名开发者正在为XMPP技术而努力。 未来的互联网上运行着数以万计的 XMPP 服务器,数百万人使用 XMPP 即时通讯软件。

4、分布式——XMPP网络的结构与电子邮件非常相似; XMPP的核心契约通信方式是先创建流,XMPP使用TCP传输XML数据流,无需中央主服务器。 任何人都可以运行自己的 XMPP 服务器,使个人和组织能够控制他们的实时消息传递体验。

5.安全性——任何XMPP合约的服务器都可以独立于公共XMPP网络(比如在企业内部网络),SASL、TLS等技术的可靠安全性已经外置在核心XMPP技术中方面。

6. 可扩展——XML命名空间的力量允许任何人在核心契约的基础上构建定制的功能; 为了保护隐私,XMPPStandardsFoundation 提供了通用扩展。

以下几点是比较现实的

7、跨平台——只要客户端是基于XMPP合约的,无论哪个平台(包括不同的联通终端)都可以互联。

8.灵活性好——XMPP不仅可以用于实时通信应用,还可以用于网络管理、内容贡献、协作工具、文件共享、游戏、远程系统监控等。

9. 多样性——使用XMPP合约构建和部署实时应用程序和服务的公司和开源代码项目分布在各个领域; 使用XMPP技术开发软件,资源和支持来源多样,让您不会陷入被“绑架”的困境。

5. XMPP合约的Java开源解决方案

Openfire+Smack+Spark是jivesoftware()贡献的Java开源解决方案,方便用户构建自己的服务并基于SmackAPI编译通信实现。

下载地址如下:

1.Openfire服务器

Openfire 是一个基于 XMPP 合约服务器端的 Java 实现。 即使两个用户连接时,可以通过点对点的方式发送消息,用户仍然需要连接到服务器来获取一些连接信息和通信信息,所以服务器端是必须实现的。 Openfire 支持插件开发。

2. 打

Smack是XMPP合约的Java实现,提供了一套可扩展的客户端调用API。 我们之前的实现依赖于这组API。

3.Spark和SparkWeb

Spark在客户端提供了基本的实现,并提出了良好的插件框架,允许用户开发插件。 SparkWeb 是一个基于 Web 的客户端。

主要包括4章:

1、Java领域即时通讯解决方案

2.搭建Openfire服务器

3.使用客户端测试我们搭建的Openfire服务器

4. 斯马克和阿斯马克

1、Java领域即时通讯解决方案

Java领域即时通讯的解决方案可以考虑openfire+spark+smack。

1、Openfire是基于Jabber合约(XMPP)的即时通讯服务器端版本。 最新版本是3.6.4,源码可以在网上找到。

2、即时通讯客户端可以使用spark2.5.8。 该版本为最新发布版本。 经过测试发现之前的版本是支持视频的。

3. Smack是一个即时通讯客户端编程库。 你可以使用smack API向openfire注册用户发送消息,但是你可以通过bug获取用户的回复消息,甚至可以制作一个手动接听机器人。 我们将将此 API 用于侧门。

2.搭建Openfire服务器

2.1 计划工作:配置主机的域名

使用openfire需要配置机器的域名。 打开C:WINDOWSsystem32driversetchosts文件,添加新行:127.0.0.1im.comit.com.cn

其他机器使用域名访问openfire,也需要在C:WINDOWSsystem32driversetchosts中指定im.comit.com.cn对应的ip地址,例如我的局域网IP是192.168。 0.177,那么在hosts文件中应该删除一个新行:

192.168.0.177im.comit.com.cn

您可以ping一下刚才的域名im.comit.com.cn,验证一下配置是否正确:

2.2 计划工作:创建openfire运行所需的数据库

下载openfire:openfire需要java运行时lbs游戏源码,因为我的机器已经有java开发环境,所以下载了免安装的zip包。

下载解压后,我的目录是:D:TechnologyXMPPopenfire。

需要创建openfire运行所需的数据库:我的笔记本电脑已经安装了Sqlserver2005。 打开D:TechnologyXMPPopenfireresourcesdatabase目录:

打开MicrosoftSQLServerManagementStudio创建数据库Openfire并运行openfire_sqlserver.sql脚本:

这是表的一部分。

由于openfire安装包没有外挂SqlServer jdbc驱动,所以需要从网上下载sqljdbc.jar并复制到以下目录:D:TechnologyXMPPopenfirelib。

2.3 开始安装openfire

表创建完成后,运行bin目录下的openfire.exe。

选择LaunchAdmin打开管理员界面:

选择繁体英语,继续下一步:

输入2.1中配置的域名:im.comit.com.cn,以及默认端口。 继续:

此步骤选择标准数据库并继续:

选择SqlServer

驱动程序类输入:com.microsoft.sqlserver.jdbc.SQLServerDriver

数据库 URL:jdbc:sqlserver://127.0.0.1;DatabaseName=Openfire

进入和退出用户名sa,密码xxxxxx,其他默认。 点击继续:

选择“初始设置”继续:

这里顺便输入游戏号和密码,说明一下:这一步是创建admin账号,密码一定要记住。 继续:

系统提示openfire已经安装。

在MicrosoftSQLServerManagementStudio中,打开User表,您将听到刚刚创建的admin帐户:

这时候不要点击“登录管理控制台”,登录肯定会失败,需要切换到这个页面:

点击“停止”,然后点击“启动”,重启成功后,点击“LaunchAdmin”进入登录页面:

输入admin和刚刚创建的密码登录:

从管理员界面,我们可以查看服务器名称:im.comit.com.cn; 并管理用户组和用户:

这里通过管理界面插入一个测试用户(该用户的jid为:teat@im.comit.com.cn,jid的定义在第二篇介绍XMPP合约时介绍)。

至此,openfire服务器基本搭建成功。

3、使用客户端测试我们搭建的openfire服务器

主要测试用例包括:连接openfire服务器、在客户端注册用户、添加好友请求以及在不同的基于XMPP合约的客户端上发送即时消息。

1.Spark客户端:与openfire同一开源组织的XMPP合约式客户端

2.SparkWeb:基于Web的XMPP客户端

3.如意通(RooyeeMessage,一款国外公司基于XMPP开发的开源软件,支持文件、音频、视频聊天等更强大的功能,下载地址:)

开始测试:

在安装openfire服务器时,我们创建了一个帐户test。 现在我们使用Spark客户端申请账户test2。 注意服务器输入的是im.comit.com.cn。 创建成功后登录。

在MicrosoftSQLServerManagementStudio中,打开User表,您将听到刚刚创建的test2帐户:

RooyeeMessage的登录设置与Spark类似。 我们使用测试账号登录RooyeeMessage。

两个软件登录成功后,使用Spark登录的test2向RooyeeMessage中登录的test发送联系人添加请求。

桌面右下角RooyeeMessage会弹出test2的请求对话框

同意请求后,您可以在联系人列表中看到双方的在线状态以及对方的注册信息。

下面测试两个异构客户端之间的通信(Spark是Java客户端,RooyeeMessage是用Delphi开发的客户端,但都是基于XMPP契约)。

来自 Spark 客户端的消息。

RooyeeMessage的消息框。

同时打开Openfire的后台,我们可以看到两者的回复信息:

至此,服务端和客户端均已准备好通过测试。

由此我们可以发现XMPP合约的开放性。

4. 斯马克和阿斯马克

1、SmackAPI是一个完整的开源API库,实现了XMPP合约,支持文件、音频、视频等消息。 您可以使用该API库进行二次开发。

2.因为Smack官方并没有实现联通版的API,而第三方提供了一个开源的基于Smack的Anadorid API:ASmack(Android buildenvironmentandpatchesforsmack)。 在Android中,您可以使用该API来开发基于XMPP合约的即时通讯应用程序。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 lbs游戏源码-基于即时通讯和LBS技术的位置感知服务(一) https://www.wkzy.net/game/173305.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务