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

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

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

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

679閲覧

PHPでWebSocket実行中に、Webサイトへのアクセスが待機してしまう

nepia

総合スコア30

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

2クリップ

投稿2018/04/25 15:46

編集2018/04/26 18:30

WebSocketを利用し、PHPにてチャットシステムを作成しようと勉強中です。

下記サイトを参考にて、動作することまでは確認しました。
http://challenge.no1s.biz/programming/php/158

具体的なコード

PHP

1server.php 2<?php 3use Ratchet\Server\IoServer; 4use MyApp\Chat; 5use Ratchet\Http\HttpServer; 6use Ratchet\WebSocket\WsServer; 7 8require dirname ( __DIR__ ) . '/vendor/autoload.php'; 9 10$server = IoServer::factory ( new HttpServer( new WsServer( new Chat () ) ), 8080 ); 11$server->run ();

コンソールで以下を実行

$ php server.php

HTML

1 2<!DOCTYPE html> 3<html lang="ja"> 4<meta charset="utf-8"> 5<title>Chat</title> 6<style> 7.container { 8 width: 600px; 9} 10.box{ 11 overflow:hidden; 12} 13.left { 14 background-color: #D3D3D3; 15 padding: 20px; 16 margin: 5px; 17 width: 300px; 18 float:left; 19} 20.right { 21 background-color: #ADFF2F; 22 padding: 20px; 23 margin: 5px; 24 width: 300px; 25 float:right; 26 27} 28</style> 29<script src="http://code.jquery.com/jquery-2.2.4.js"></script> 30<script> 31(function($){ 32 var settings = {}; 33 34 var methods = { 35 init : function( options ) { 36 settings = $.extend({ 37 'uri' : 'ws://localhost:8080', 38 'conn' : null, 39 'message' : '#message', 40 'display' : '#display' 41 }, options); 42 $(settings['message']).keypress( methods['checkEvent'] ); 43 $(this).chat('connect'); 44 }, 45 46 checkEvent : function ( event ) { 47 if (event && event.which == 13) { 48 var message = $(settings['message']).val(); 49 if (message && settings['conn']) { 50 settings['conn'].send(message + ''); 51 $(this).chat('drawText',message,'right'); 52 $(settings['message']).val(''); 53 } 54 } 55 }, 56 57 connect : function () { 58 if (settings['conn'] == null) { 59 settings['conn'] = new WebSocket(settings['uri']); 60 settings['conn'].onopen = methods['onOpen']; 61 settings['conn'].onmessage = methods['onMessage']; 62 settings['conn'].onclose = methods['onClose']; 63 settings['conn'].onerror = methods['onError']; 64 } 65 }, 66 67 onOpen : function ( event ) { 68 $(this).chat('drawText','サーバに接続','left'); 69 }, 70 71 onMessage : function (event) { 72 if (event && event.data) { 73 $(this).chat('drawText',event.data,'left'); 74 } 75 }, 76 77 onError : function(event) { 78 $(this).chat('drawText','エラー発生!','left'); 79 }, 80 81 onClose : function(event) { 82 $(this).chat('drawText','サーバと切断','left'); 83 settings['conn'] = null; 84 setTimeout(methods['connect'], 1000); 85 }, 86 87 drawText : function (message, align='left') { 88 if ( align === 'left' ) { 89 var inner = $('<div class="left"></div>').text(message); 90 } else { 91 var inner = $('<div class="right"></div>').text(message); 92 } 93 var box = $('<div class="box"></div>').html(inner); 94 $('#chat').prepend(box); 95 }, 96 }; // end of methods 97 98 $.fn.chat = function( method ) { 99 if ( methods[method] ) { 100 return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); 101 } else if ( typeof method === 'object' || ! method ) { 102 return methods.init.apply( this, arguments ); 103 } else { 104 $.error( 'Method ' + method + ' does not exist' ); 105 } 106 } // end of function 107})( jQuery ); 108 109$(function() { 110 $(this).chat({ 111 'uri':'ws://localhost:8080', 112 'message' : '#message', 113 'display' : '#chat' 114 }); 115}); 116</script> 117</head> 118<body> 119 <input type="text" id="message" size="50" /> 120 <div id="chat" class="container"></div> 121</body> 122</html>

コンソールでのserver.phpが実行中に、index.htmlとしてアクセスすれば問題なく動作します。
しかし、index.htmlからindex.phpに拡張子を変更して、再度アクセスすると読み込み中のまま動作しなくなってしいます。

webサーバーはXAMPPをローカルで起動しております。

コンソールで使用したphp.exeとXAMPPで使用しているphp.exeは同一のものです。

どうすればindex.phpでも動作するようになるのでしょうか。

皆様のご回答をお願いいたします。

追記
動作しないと記入しましたが、読み込み中が永遠と終わらない状態です。
server.phpのスクリプトを停止するとindex.phpがすぐに表示されます。

同じマシン内で、WebサーバーとSocketサーバーが同じマシン内で共存されることは不可能なのでしょうか・・・

mpyw👍を押しています

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

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

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

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

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

m.ts10806

2018/04/25 20:28

読み込み中のまま動作しなくなっているということはどこかでエラーが出ているのではないでしょうか?ブラウザ開発ツールのコンソール、サーバーのエラーログ ご確認ください。
nepia

2018/04/26 01:45

動作しないと記入しましたが、読み込み中が永遠と終わらない状態です。server.phpのスクリプトを停止するとindex.phpがすぐに表示されます。
m.ts10806

2018/04/26 01:47

server.php自身はちゃんとリクエストを受け取っているのでしょうか。処理がどこまで通っていてどのような状態になっているか確認してみてください。
nepia

2018/04/26 02:07

index.htmlとして表示した場合は、受け取っていました。index.phpに変えてからは、index.php自体が読め込めないので、リクエストを投げることができておりません。
m.ts10806

2018/04/26 04:07

「index.php自体が読め込めない」というのはどういうことでしょうか?そもそもなぜかえたのでしょうか?「HTML」として提示されているのが元index.htmlでindex.phpにファイル名が変更されたもので合ってますよね?
nepia

2018/04/26 04:17

index.htmlから単純に拡張子を変更しただけです。phpとして処理をさせたいことがある為です。「index.php自体が読め込めない」というのは、ブラウザからhttp://localhost/index.phpへアクセスしても読み込み応答待ちが続きます。
guest

回答1

0

自己解決

自己解決しました。
PHPStormの外部接続数が1となっており、上限を増やしたところ、正常に動作するようになりました。
皆様ありがとうございました。

投稿2018/04/27 13:28

nepia

総合スコア30

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問