質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

Q&A

解決済

2回答

536閲覧

chatアプリの考え方

akiyama3284pga

総合スコア186

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

0グッド

0クリップ

投稿2022/10/19 01:40

編集2022/10/19 01:45

勉強を兼ねてchatアプリを作ってみようと思います。

現在の妄想では、chatアプリと言えど真にp-to-pでやりとりしている訳が無いと思います。
そうでなければサーバとしてのchatアプリの存在意義がありません。
つまりchatアプリが双方向のサーバとして仲介しています。

それを前提とした場合、今の自分の知識では、naptに関する障壁があります。

chatアプリはサーバとして、まずは利用者毎にipアドレスを紐づけると思います。
だからどこのだれかもわからない人同士でもサーバを介することにより、相互のipがわかるため、
データの送受信ができるだと...

しかし、naptで割り当てられるポートが運悪くアプリが閉じられているときに変更されたとします。
この時に会話相手から送られたデータは正しく届かないのではないかと思います。

例:
202.11.00.11: 89999
↓変更
202.11.00.11: 89950

chatアプリ内の現在のデータベース
akiさん == 202.11.00.11: 89999

このあたりをどのように対処しているのでしょうか。
そもそも対処せずに、残念でした。次回アプリを起動してipが更新されるまでに届いたメッセージは全て消失します。
のような対応をしているのでしょうか...

まとまりがなく申し訳ございません。
何かヒントを頂けましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そのChatというのはSocket通信を利用することを想定してますか? そうであれば色々妄想されていることはちょっと違うという気がしますが。

参考)
https://bny64.github.io/2020/12/13/http-socket-jp/

個人的にはまずはPythonあたりでSocket通信のライブラリを使用して簡単なチャットシステムを作って、通信の流れなどを実際に見てみる方が理解が早いと思います。

追記)
後半の部分を再度読んで何を悩まれているかすこし分かったのですが、IPやポートで個を識別するのは無理かと思いますので、アプリ内で個の識別のために使うUUIDみたいなのを生成して、通信の都度そのUUIDをくっつけて相手に送信するみたいなことは必要ですよね。

投稿2022/10/19 01:52

編集2022/10/19 01:59
AbeTakashi

総合スコア4539

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akiyama3284pga

2022/10/19 02:29 編集

ありがとうございます。 まさにその手があったかと... UUIDを使用すれば利用者が名前を変更してもipが変わろうと必ず一意に個が求まると思います。 自分はsocketの勉強を兼ねて作ろうとしている次第であります。 ここだけは確認しておきたいのですが、 socketを利用するといってもその相手はchatアプリサーバであり、その先の個と直接ではない。という認識で問題ないでしょうか? それであれば、どの個に対してもchatアプリのデータベース状況の見せ方の話になり、非常に先行きが明確になります。 それを踏まえて簡単なアプリを作成してみたいと思います。 追-- https://ascii.jp/elem/000/001/235/1235153/ こちらの記事で上の疑問は解消されました。 ご助力ありがとうございました。
AbeTakashi

2022/10/19 02:33 編集

「socketを利用するといってもその相手はchatアプリサーバであり、その先の個と直接ではない。という認識で問題ないでしょうか?」の部分は私の理解力が足りないせいかちょっと分からないのですが、単純なソケット通信でチャットを作るなら、自分(クライアント)からみれば、相手は1:1もしくは1:他であり、その先は常に「持続的に直接的に繋がっている相手」であると思います(Socket通信でコネクション張りっぱなしであれば)。アプリは時にはクライアントであり、時にはサーバになります。 もちろん、LINEのように中央管理のサーバを作って、メッセージをやりとりするケースもありますので、その規模まで想定されてるとすればかなり話が変わると思います。Socket通信でコネクション張りっぱなしなんてことはありませんので。 参考) https://ascii.jp/elem/000/001/235/1235153/ もしかすると、こちらを想定されてるのかもしれませんね。であれば、私の話はちょっとずれていたかもしれません。 追記) たまたま同じ記事を見てたようですw
akiyama3284pga

2022/10/19 03:15 編集

ありがとうございます。 2つのスタイルがある点を混同しており、今回区分けするよい機会となりました。(データベースをかますと言った瞬間にそれは、LINEスタイルのchatアプリを指すということ) しかし、もしLINEスタイル"ではない"タイプのchatアプリを作成する場合にはやはりipアドレスに個を対応させなければ、そもそもソケットの送信元が変わることになり、相手のソケットに記録されている送信先アドレスに差異が生じることになり、そのペアではソケットを作り直さなければ通信は不可となるように思います。 https://networkengineering.stackexchange.com/questions/12565/how-is-a-tcp-connection-maintained-over-a-changing-ip-address こちらのアンサーが参考になりました。 その点、中央管理サーバであればipを変更してないことが保証されているため、その種の問題は起きないのだと思います。 ゆくゆくは、一つのchatアプリとして世に送り出してみたいという妄想がありますため、LINEスタイルのもので勉強していきたいと存じます。確かにLINEスタイルであれば、socketの張りっぱなしは必要ないと思います。 必要な時だけ一時的にsocketを作成するhttp通信と同じようになるかと思います。 ※張りっぱなしのタイプは生のsocketを間接的にではなく直接的に書く必要があるので、やはりsocketの扱いに関してよい勉強になると思いますので、どちらもやってみたいと思います。
guest

0

Omegleは、Socket通信を利用してランダムな相手とチャットできるオンラインプラットフォームです。

投稿2024/03/12 08:34

mariakenneth

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問