원격 Linux 서버(내 대학에서 설정)의 포트 127.0.0.1:5006에 자동으로 업데이트되는 실시간 Python 플롯(Bokeh 사용)이 표시되어 있습니다. 일반적으로 로컬 컴퓨터에서 플롯을 보려면 서버에 SSH로 연결하고 해당 주소에 대한 포트 전달을 활성화해야 합니다. 제 질문은 누군가에게 내 서버의 IP 주소(예: 123.12.12.123)와 찾을 포트를 알려주면 SSH 문제 없이 플롯을 볼 수 있도록 하려면 어떻게 해야 합니까? 이것이 가능한가?
고쳐 쓰다: 세부 사항을 구현하는 데 필요한 코드입니다. 플롯 데이터를 읽으려면 두 개의 파일이 필요하므로 포함합니다.여기.
'''
Use the ``bokeh serve`` command to run the example by executing: bokeh serve sliders.py
at your command prompt. Then navigate to the URL-http://localhost:5006/sliders
in your browser.
'''
from bokeh.io import curdoc
from bokeh.layouts import column, row
from bokeh.models import Button, ColumnDataSource
from bokeh.plotting import figure
# Callbacks
def update_data():
print("reading new data")
df1 = read_pickle('weeklydata2.pkl')
source.data = ColumnDataSource.from_df(df1)
# Set up data
df =read_pickle('weeklydata1.pkl')
f = dict(OAT='green', SAT='orange', OAH='red')
source = ColumnDataSource(df)
# Set up plot
p = figure(x_axis_type="datetime")
for i in df.columns:
p.line('index',
i,
source=source,
legend_label=i,
line_color=f[i])
p.circle('index',
i,
source=source,
size=10,
color=f[i])
# Set up widgets
button = Button(label='Refresh Plot')
button.on_click(update_data)
inputs = column(button)
curdoc().add_root(row(inputs, p, width=800))
curdoc().title = "Time Series of Temp., Setpoint and Humidity Variables"
그러면 출력이 생성됩니다.
2019-11-26 10:53:19,916 Bokeh 서버 버전 1.4.0 시작 (Tornado 6.0.3에서 실행)
2019-11-26 10:53:19,918 사용자 인증 Hook 미제공 (기본적으로 활성화되어 있음)
2019-11-26 10:53:19,921 Bokeh 애플리케이션은 다음에서 실행됩니다.http://localhost:5006/datashow
2019-11-26 10:53:19,921 Bokeh 서버 시작, 프로세스 ID: 7116
2019-11-26 10:53:23,385 WebSocket 연결이 열렸습니다.
2019-11-26 10:53:23,385 서버 연결이 생성되었습니다
새 데이터 읽기
새 데이터 읽기
2019-11-26 10:54:41,574 WebSocket 연결 종료: 코드=1001, 이유=없음
중단하다, 닫다
위 포트에서 서버를 실행하여 누구나 라이브 플롯만 볼 수 있고 원하는 경우 업데이트할 수 있는 옵션을 갖기를 원합니다. 여기에서는 하드코딩된 정적 데이터 소스를 제공하는 경우에만 업데이트가 작동합니다. 하지만 무슨 말인지 알 것 같나요?
답변1
이 정보를 사용하여 원하는 것을 달성하는 유일한 방법은 사용자와 다른 모든 MAC 주소를 필수 포트로 리디렉션하는 iptables 규칙을 사용하는 것입니다. 예를 들어 다음과 같습니다.
iptables -t nat -A PREROUTING -p tcp --dport 22 -m mac ! --mac-source 11:22:33:44:55:66 -j DNAT --to 123.12.12.123:5006
답변2
- 포트 5006에서 수신 대기하는 애플리케이션은 127.0.0.1 대신 0.0.0.0에 바인딩되어야 합니다(이미 바인딩되어 있고 방화벽으로 인해 제한이 발생하지 않는 한).
- 포트 5006에 대한 트래픽은 서버의 자체 방화벽 및/또는 근처 라우터를 통해 허용되어야 합니다. 또는 허용된 일부 포트(80, 443...)에서 수신 대기하도록 애플리케이션을 재구성할 수 있습니다.