ソケットを使用する目的は、アクションをリアルタイムで実行して、クライアントから要求されなくてもサーバーがブラウザーにコンテンツを送信 (またはその逆) できるようにすることです。
ユーザーは、リアルタイムで情報を取得するために Web ブラウザーやアプリ (クライアント) を再表示する必要はありません。たとえば、オンラインチャットやメッセージシステムを使用する場合や、コンソールを監視する場合です。
ソケットを Web で使用するには、
[ Web User Experience ] プロパティを Smooth に設定する必要があります。
Server.Socket API は、Server.Socket
外部オブジェクトと NotificationInfo SDT で構成されます。
Server.Socket 外部オブジェクトは、この機能に必要なすべてのメソッドおよびプロパティを公開します。
メソッド |
説明 |
最も一般的なユースケース |
Server.Socket.Notify(NotificationInfo sdtNotification): Numeric |
アクションを開始したユーザーに通知を送信します。セッション中、有効です。 |
送信されたプロシージャーが終了したときに、ユーザーにフィードバックを送信します (送信アクションがそのユーザーのセッションから実行された場合)。 |
Server.Socket.NotifyClient(String clientId, NotificationInfo sdtNotification ): Numeric |
指定されたユーザーに通知を送信します。 |
チャットを実装するために、一部のユーザーのみが通知を受け取ります。 |
Server.Socket.Broadcast(NotificationInfo sdtNotification) |
接続されているユーザーすべてに通知を送信します。 |
すべてのユーザーにアラートを送信します。 |
Server.Socket.NotifyClientText(String clientId, String Message ): Numeric |
Raw メッセージを特定のクライアントに送信します。 |
|
Server.Socket.ClientId: String |
現在のセッションの ClientId を取得します。 |
ErrCode |
エラーコード |
ErrDescription |
エラーメッセージ |
0 |
OK |
1 |
WebSocket サーバーを起動できませんでした |
2 |
WebSocket セッションが見つかりません |
3 |
WebSocket セッションが終了しているか、無効です |
4 |
メッセージをクライアントに送信できませんでした |
NotificationInfo SDT は、Socket.Server 外部オブジェクトの前述のメソッド (Notify、NotifyClient、BroadCast) に送信する通知情報を指定するためのものです。
Id |
開発者は、Id を使用して通知を識別することで、通知を取得するコントロールを指定できます。 |
Object |
このプロパティを指定することで、開発者はこの通知をリッスンするオブジェクトを特定できます (特に Broadcast の場合)。 |
Message |
通知のメッセージです。 |
メッセージシステムを実装しており、ユーザーが作成したポストを通知する必要があるとします。この場合、ポストメッセージのデータとともに NotificationInfo SDT をロードします。次に、Server.Socket 外部オブジェクトを使用して、メッセージをブロードキャストします。
//&NotificationInfo は NotificationInfo SDT データタイプ。&PostId はポストの識別子。
&NotificationInfo.Id=&PostId.ToString()
//次は、通知するデータがロードされる SDT。json 形式で送信されるため、任意のデータを送信可能。まず SDT にこのデータをロード。
&commentNotificationInfo.PostId = &PostId
&commentNotificationInfo.PostCommentContent = &PostCommentContent
//次に、json 形式で NotificationInfo SDT に送信するデータを割り当てる
&NotificationInfo.Message=&commentNotificationInfo.ToJson()
&socket.Broadcast(&NotificationInfo)
//&socket は Server.Socket 外部オブジェクトのデータタイプ。
通知を受信する Web オブジェクト内で、NotificationInfo SDT データタイプに基づいて変数を受信する OnMessage イベントを使用します。通知情報はここで処理されます。
Event OnMessage(&NotificationInfo)
for each line
if (&NotificationInfo.Id=&postid.ToString())
//通知データを処理
endif
endfor
Endevent
特定のクライアントにのみ通知を送るシステムがあるとします。このクライアントは、Server.Socket 外部オブジェクトの [ ClientId ] プロパティを使用して識別されます。
次に示すのは、通知を受信する Web パネルです。開始イベントでは、後でセッションを識別できるように &clientId を保存します。
Event Start &clientId = &socket.ClientId //クライアントの情報を保存: RegisteredClientId = &clientId//
Endevent
通知を送信するプロシージャーで、&ClientId を取得します (データベースに保存されている可能性があります)。Notifyclient メソッドの実行時に &ClientId をパラメーターとして渡すので、そのクライアントだけがメッセージを受信します。
&ClientId = RegisteredClientId &NotificationInfo.Id=&cont.ToString() &NotificationInfo.Message="El mensaje " + &cont.ToString() + "cliente " + &ClientId &socket.NotifyClient(&ClientId, &NotificationInfo)
Event onmessage(¬ificationInfo)
//¬ificationInfo で何らかの処理を実行
endevent
注:
- ブロードキャストメソッドは、パブリックメッセージの場合にのみ実行する必要があります。これは、通知イベントをサブスクライブするすべてのブラウザーインスタンスにそのメッセージが送信されるためです。
- 同じユーザーイベントが (パラメーターが異なっていても) 100 ms 未満の範囲で一度だけサーバー上で実行されます (SAC #48220)。
「
Web 通知およびプログレス ユーザー コントロールの要件」を参照してください。
Web ソケットをサポートする Web ブラウザーのリストは、
ここで確認できます。
Component ドメインを使用して、スマートデバイスのアプリで Web 通知を受信できます (このリンクに示されている OS バージョンを確認)。スマート デバイス アプリケーションの場合は、Client.Socket 外部オブジェクトとともに使用できます。
- gxgral.js ファイルの最後に行 "gx.dbg.enabled = true" を追加して、追加情報を javascript コンソールに取得できます。
- 警告メッセージ: "Warning: WebNotifications are not supported with "Web User Experience": "Previous versions".You must use Smooth.".Web Notifications are only supported with Web User Experience property : "Smooth".
Html5 Web Notifications User Control メッセージの機能を使用した Web ページを開発する方法 外部アプリケーションから通知メッセージを受信し、処理する方法 特定のクライアントに対する Web 通知の使用