什么是限制AngularJS聊天室中消息的最佳方法

时间:2014-04-02 23:00:38

标签: angularjs socket.io firebase pubnub

好的,这就是设置:

构建实时AngularJS聊天应用程序。但是,我想限制用户通过API调用看到的消息,该API调用确定其附近的其他消息。

出于某种原因,我无法解决这个问题。我已经探索了socket.io,FireBase,PubNub,我似乎无法想出一种很好的方法来限制基于设置参数的API调用从这些服务返回的数据。

思想?

1 个答案:

答案 0 :(得分:4)

通过Proximity进行Geohashing聊天

立即尝试:Geohash Chat by Proximity

要按位置连接两个或更多人的群组,您将采用纬度/经度值并降低精确度的分辨率,通过这样做,您可以扩展邻近度。您可以一次使用多种分辨率或使用固定分辨率。

  

获取源代码:GitHub Repository for Geo Chat by Proximity

Geohashing Chat Conversations based on Proximity Zoom Level

Geo Hashing的基础知识

接下来,我们将介绍geo哈希lat / long coords的一些源代码片段。通过降低浮点值的精度来增加纬度/长度的半径是相当简单的。使用此功能,您可以展开圆圈并收集Lat / Long。

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// Geo Hash
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
function geohash( coord, resolution ) {
    var rez = Math.pow( 10, resolution || 0 );
    return Math.floor(coord * rez) / rez;
}

Acquire Lat Long Chat Proximity Location

Geo Hashing Resolution“Zoom”

“缩放”级别,基本上是几个不同的笛卡尔网格,粒度越来越大。一旦Geofencing事件触发,您将发布到与每个缩放级别对应的一组通道。缩放级别很重要,因为我们实际构建Geofencing和PubNub之间的链接。缩放级别是笛卡尔坐标Lat / Long的分辨率/分辨率(想想X,Y坐标)。通过降低纬度/经度坐标的分辨率,我们可以构造一个点击网格的1个框的通道名称。分辨率越小意味着框越大,并且需要确定关联的PubNub通道。

// Create Proximity Channel
channel = geohash( pos.latitude, 0 ) + '' + geohash( pos.longitude, 0 );

这将创建一个非常宽的圆并生成用于连接的通道名称。接下来使用此频道名称连接到PubNub。

// Connect to Proximity Channel
pubnub.subscribe({
     channel : channel,
     message : receive,
     connect : ready,
    presence : presence
});

Acquired Latitude Longitude Chat Proximity Group

多路复用9个框

您将计算周围的方块,以提供更精确的方式扩展锥度和半径。这将消除“击剑”效应。

Geo Hashing与PubNub结论

就是这样!您只需降低地理坐标的分辨率,并将其用作PubNub上的通道名称。另请查看浏览器的navigator.geolocation.getCurrentPosition(...)方法,以获取chrome / firefox / ie / opera / mobile / safari浏览器中的lat / long。

  

同时结帐PubNub Connected Car Solution Kit

Geohashing Chat Conversations based on Proximity Nearby